2012-03-23 20 views
9

Khi tôi thêm công cụ mới vào git-gui, hộp thoại cho biết rằng tôi có thể sử dụng một số biến được chuyển đến công cụ ($REVISION, $ARGS, $FILENAME).

Có bất kỳ tham số nào khác là không được ghi lại (ví dụ: thư mục repo hiện tại, v.v ...) không? Tại sao chúng không có trong số documentation của git-gui?

Trường hợp sử dụng hiện tại của tôi là tôi có hai tập lệnh bật/tắt móc trước. Hiện tại, tôi phải mở Windows Explorer của mình và nhấp đúp vào các tệp hàng loạt có chút vụng về. cách dễ dàng hơn sẽ là để làm điều đó trực tiếp ra khỏi git-gui ...

Là một thay thế (phụ câu hỏi), tôi cũng sẽ quan tâm đến bỏ qua pre-cam kết nối (ví dụ vượt qua --no-verify khi cam kết) ra khỏi git-gui.

Trả lời

4

Khi nhìn vào git-gui sources, tôi tìm thấy (không có mặt trong git-gui man page):

  • git-gui.sh:
    • $GITGUI_VERBOSE, để cho phép tiết tải
    • SSH_ASKPASS, để đề nghị thực hiện của chúng ta về askpass, nếu không được đặt là
    • GIT_DIRGIT_WORK_TREE, để thiết lập kho
+0

tôi thấy 'thiết lập s "sử dụng: $ :: argv0 $ :: subcommand $ :: subcommand_args" ': có thể có một cách để vượt qua và thực hiện một lệnh git phụ ... – VonC

+0

@ xem đúng, đó là biến được đưa vào tài khoản của git-gui lúc khởi động. Tuy nhiên, 'GIT_DIR' và' GIT_WORK_TREE' vẫn nên được đặt ('Công cụ -> Thêm') và được tính đến bởi lệnh phụ. Tôi đã không có gì trên '--no-verify' mặc dù. – VonC

3

tôi cá nhân mở rộng git-gui vì có công cụ làm việc trên nhiều file

Trong tập tin tools.tcl, thêm 2 dòng sau

set env(GIT_GUITOOL) $fullname 
set env(FILENAME) $current_diff_path 
>> set env(FILENAMES) [array names selected_paths] 

và:

unset env(GIT_GUITOOL) 
unset env(FILENAME) 
>> unset env(FILENAMES) 

Sử dụng $FILENAMES thay vì $FILENAME trong công cụ của bạn, và danh sách các file sẽ được chuyển tách bằng dấu cách (rất hữu ích cho việc tạo ra một công cụ như: rm $FILENAMES)

Lưu ý về $FILENAME (và $FILENAMES) Git cơ chế cụ gui không làm việc với các tập tin có chứa không gian tôi đã cố gắng trích dẫn mỗi tập tin, bằng cách viết

set env(FILENAMES) [string map { \{ \" \} \" } [array names selected_paths]] 

Nhưng Console::exec dường như args tách trên không gian và thoát khỏi mỗi đối số.

+0

+1. âm thanh thú vị, ngoài các biến tôi đã xác định trong câu trả lời của tôi. – VonC

1

Hai lưu ý đến các giải pháp trước:

  1. selected_paths toàn cầu

để gửi phi rỗng $ FILENAMES cho lệnh đó là cần thiết để tuyên bố selected_paths như toàn cầu

  1. tệp chứa khoảng trắng

để đăng các tệp có chứa khoảng trắng, hãy sử dụng "$ {FILENAMES [@]}" thay vì $ FILENAMES đơn giản.

Bạn có thể xem cách đường dẫn được gửi đến lệnh bằng cách sử dụng lệnh printf '\ "% s \"' ví dụ:

printf '\ "% s \"' FILENAMES = "$ {FILENAMES [@]}"