Với svn, tôi có thể chạy các lệnh trên các tệp trong thanh toán, mà không cần cd
thanh toán trước. Ví dụ:Tôi có thể thực hiện các thao tác git (thêm/diff/commit) trên các tệp trong kho lưu trữ khi thư mục hiện tại của tôi không có trong kho lưu trữ
# Located in /tmp, running svn operation on /home/d5ve/checkout
[email protected]:/tmp> svn add /home/d5ve/checkout/myfile.txt
[email protected]:/tmp> svn diff /home/d5ve/checkout/myfile.txt
[email protected]:/tmp> svn commit /home/d5ve/checkout/myfile.txt
Khi tôi cố gắng công việc này sử dụng git, tôi nhận được một lỗi:
# Located in /tmp, attempting git operation on /home/d5ve/checkout2
[email protected]:/tmp> git add /home/d5ve/checkout2/myfile.txt
fatal: Not a git repository (or any of the parent directories): .git
Tôi đã thử bằng cách sử dụng --git-dir
và --work-tree
cờ, nhưng điều đó cũng dường như thất bại.
Bất kỳ đề xuất nào về git people? Tôi sử dụng công việc này rất nhiều và thực sự bỏ lỡ nó khi sử dụng git.
CẬP NHẬT 2016 Câu trả lời đúng hiện điều này là sử dụng -C
cờ để git, mà đã được giới thiệu trong phiên bản 1.8.5 trong năm 2013. Xem https://stackoverflow.com/a/35899275/357336
UPDATE: Dựa trên câu trả lời lunaryorn dưới đây, Tôi đã tạo một kịch bản lệnh perl đơn giản làm việc ra vị trí của thư mục .git từ đường dẫn tệp và đặt các biến môi trường GIT_WORK_TREE và GIT_DIR cho lệnh.
hãy có một cái nhìn tại địa chỉ: http://github.com/d5ve/rgit
SỬ DỤNG: COMMAND rgit [ARGS]
Về cơ bản chỉ cần thay thế git với rgit trong một lệnh, và bạn có thể chạy các lệnh từ bên ngoài kho .
cd /tmp
rgit diff /home/d5ve/checkout1
rgit add /home/d5ve/checkout1/rgit.pl
rgit commit /home/d5ve/checkout1/
Bản sao có thể có của [Làm cách nào để thực thi lệnh Git mà không nằm trong thư mục lưu trữ?] (Http://stackoverflow.com/questions/7149984/how-do-i-execute-a-git-command-without -being-on-the-repository-folder) –