2010-07-08 17 views
13

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--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/ 
+0

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) –

Trả lời

15

Bạn phải sử dụng cả hai lựa chọn với nhau:

git --git-dir=/home/d5ve/checkout2/.git --work-tree=/home/d5ve/checkout2/ add /home/d5ve/checkout2/myfile.txt 

Lưu ý, rằng --git-dir không đề cập đến thư mục chứa bản sao làm việc, nhưng đến .git thư mục con, trong đó có kho riêng của mình. git cung cấp hai biến môi trường để đặt các tùy chọn này vĩnh viễn cho một phiên:

export GIT_WORK_TREE="/home/d5ve/checkout2" 
export GIT_DIR="${GIT_WORK_TREE}/.git" 
git status 
+1

Chúc mừng lunaryorn, đó là sự kết hợp mà tôi không thử. Tôi có một loạt các kho lưu trữ khác nhau, vì vậy tôi sẽ cố gắng kết hợp một kịch bản lệnh bash để GIT_WORK_TREE và GIT_DIR lấy từ thư mục được đề cập trong lệnh và đặt chúng cho chính lệnh git. Giống như 'mygit add/home/d5ve/checkout2/myfile.txt' – d5ve

1

Hãy kiểm tra câu hỏi hơi khác với câu trả lời khác được đề xuất trong câu trả lời khác tại đây.

How do I execute a Git command without being on the repository folder?

Theo một số người điều hành Tôi không được phép đăng các câu trả lời ở đây (một số loại quạt Chuck Norris tôi đoán).

+0

Khi được liên kết ở đây, tùy chọn -C để git bây giờ là cách chính xác để trả lời câu hỏi này. Lá cờ này được thêm vào git v1.8.5 vào năm 2013. Chúc mừng calandoa. – d5ve

Các vấn đề liên quan