Tôi đang tìm cách để thực thi lệnh git từ một đường dẫn và thay đổi kho lưu trữ theo một đường dẫn khác. Vì vậy, tôi đã kết thúc câu hỏi này ở đây.
Nhưng đối với các nhu cầu cụ thể của tôi, cả câu trả lời được chấp nhận cũng như bất kỳ câu hỏi nào khác đều có ích.
Tôi cần chạy các lệnh git bằng cách sử dụng sudo -u USER /usr/bin/git
(một người dùng khác đang chạy nó). Và như bạn có thể biết, sudo không cho phép tôi chạy cd
lệnh, vì vậy tôi không thể ở trong thư mục kho lưu trữ.
Vì vậy, tôi đã đi đến trang người đàn ông của git . Và trong số các tùy chọn, tôi thấy --git-dir=<path>
:
--git-dir =
Đặt đường dẫn đến kho lưu trữ. Điều này cũng có thể được kiểm soát bằng cách đặt biến môi trường GIT_DIR. Nó có thể là một đường dẫn tuyệt đối hoặc đường dẫn tương đối đến thư mục làm việc hiện tại.
Vì vậy, nếu nó giúp được ai đó, bạn vẫn có thể sử dụng git từ một đường dẫn và thay đổi kho lưu trữ "cách xa bạn". Chỉ dùng:
git --git-dir=/path/to/repository GIT_COMMAND
hoặc, để chạy nó như một người dùng khác, hãy làm một cái gì đó như:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Cũng từ trang người đàn ông của git-init :
Nếu biến môi trường $ GIT_DIR được đặt thì nó chỉ định đường dẫn sử dụng thay vì ./.git cho cơ sở của kho lưu trữ.
Vì vậy, nếu bạn muốn khởi tạo kho lưu trữ trong thư mục .git thông thường, bạn sẽ cần chỉ định nó cùng với --git-dir
tùy chọn. ví dụ:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Sau khi khởi tạo kho lưu trữ trên /path/to/repo/.git
, tất cả các lệnh tiếp theo sẽ có tùy chọn --work-tree=<path>
, như được mô tả trên trang man của git:
--work-cây =
Đặt đường dẫn đến cây làm việc. Nó có thể là một đường dẫn tuyệt đối hoặc một đường dẫn liên quan đến thư mục làm việc hiện tại. Điều này cũng có thể được kiểm soát bằng cách đặt biến môi trường GIT_WORK_TREE và biến cấu hình core.worktree (xem core.worktree trong git-config (1) để thảo luận chi tiết hơn).
Vì vậy, lệnh đúng để chạy git với tư cách người dùng khác và khởi tạo kho lưu trữ mới là:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' add /path/to/repository/*
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' commit -m 'MESSAGE'
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' remote add origin user@domain.com:path
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' push -u origin master