2014-07-21 22 views
6

tôi đã thấy:Chạy lệnh git trên điều khiển từ xa?

  • How to run GIT commands on remote repository - "SSH vào máy chủ" hoặc "git fetch; gitk --all"
  • Run git commands on remote working tree (GIT_WORK_TREE=/path) - câu trả lời là về git push --tags
  • How to "git show" on a remote repo? - "Sử dụng git fetch để có được điều khiển từ xa lịch sử, sau đó lấy lại tệp từ kho lưu trữ đối tượng cục bộ. "
  • How to run git command remotely? - "ssh [email protected] "cd my/repo/path && git show""
  • How can I manually run the hook post-receive on git? "Một móc là một kịch bản shell thực thi Bạn có thể thực hiện nó từ dòng lệnh nếu bạn cần phải chạy nó bằng tay, mặc dù xây dựng inuput stdin dự kiến ​​là hơi tẻ nhạt nếu repo của bạn. có nhiều hơn một đầu (nghĩa là, bạn sử dụng các nhánh). "
  • Detecting changes to remote branch - "Không theo dõi các tệp trong hoạt động bên trong của git theo cách thủ công. Sử dụng git để kiểm tra mọi thứ cho bạn. Trong trường hợp này git rev-parse --verify origin/master sẽ hiển thị cho bạn SHA bản sao gốc/bản gốc của bạn và git ls-remote origin master để nhận SHA từ xa. "
  • Commit history on remote repository - "git log remotename/branchname - Bạn không thể kết nối trực tiếp với máy chủ để kiểm tra nhật ký ở đó, những gì bạn làm là tải trạng thái của máy chủ xuống git fetch và sau đó xem nhật ký của các nhánh từ xa."

Đánh giá của thành viên này, cho những gì tôi muốn làm, tôi phải đăng nhập qua ssh và chạy một kịch bản trên máy chủ từ xa; nhưng tôi đã hy vọng cho một giải pháp tích hợp git hơn, vì vậy hãy để tôi giải thích những gì tôi muốn làm.

Tôi có một repo từ xa, đó là git-svn; sau đó tôi có một repo git-chỉ địa phương mà là một bản sao của điều khiển từ xa. Vì vậy, địa phương có tham chiếu đến URL từ xa trong remote.origin.url (xem qua git config --list).

Điều tôi muốn làm, chạy tương đương với git svn log (có thể với một số xử lý hậu kỳ) trên điều khiển từ xa, nhưng với cuộc gọi được bắt đầu từ máy địa phương/repo - và nhận lại kết quả, máy địa phương/repo. Tất nhiên, git-svn thậm chí có thể không được cài đặt trên máy cục bộ, điều đó có nghĩa là chỉ có điều khiển từ xa mới có thể hiểu được lệnh như vậy.

Tôi sẵn sàng mã hóa móc cho repo từ xa - nhưng theo như tôi có thể thấy, móc chỉ có thể chạy ở các sự kiện được chỉ định (ví dụ: pull, update ...) - bạn không thể gọi chúng một cách tùy ý: Tôi nhớ, một khi tôi đã phát triển một kịch bản post-update; và để gỡ lỗi nó, tôi đã phải đặt nó để trả về một lỗi luôn, và sau đó tôi sẽ "đẩy" một cam kết "giả", mà có thể chạy kịch bản, và khi tiếp nhận lỗi, roll-back repo - tất nhiên, đây không phải là cách tôi tưởng tượng kịch bản từ xa nên chạy.

Một điều khác có thể là viết mã bí danh cho repo cục bộ, sau đó gọi SSH theo số remote.origin.url - có thể điều đó sẽ làm cho hoạt động của git svn log từ xa dễ dàng hơn một chút?Cuối cùng, đây là câu hỏi của tôi - tôi có những tùy chọn nào để chạy một lệnh tương đối tùy chỉnh git (như git svn log hoặc git bí danh được định nghĩa từ xa) trên repo từ xa, bằng cách tận dụng tối đa dữ liệu đã có có sẵn trong repo địa phương (có nghĩa là, tôi muốn tránh viết một tập lệnh bash, với các đường dẫn/URL được mã hóa lặp lại, sẽ gọi ssh và thực hiện bất kỳ điều gì cần thiết trên điều khiển từ xa) - có thể, theo cách tương tự như điều khiển từ xa post-updategit móc trả về giá trị của nó cho người gọi địa phương, bắt đầu bằng "remote:"?

Trả lời

2

Câu trả lời ở đây có vẻ là chủ yếu:

ssh server 'cd /path/to/repo && git svn log' 

Bạn có thể viết một chút mã để có được server/path/to/repo từ git remote (giả sử từ xa của bạn là một ssh loại từ xa). Không cần thông tin ngữ cảnh nào khác ngoài thông tin có thể dễ dàng tìm thấy trong repo git cục bộ.

+0

Cảm ơn vì điều đó, @GregHewgill - sự nghi ngờ của tôi nữa, tốt để xác nhận; mặc dù tôi đã hy vọng có thể có một cơ chế cho, ví dụ, gọi các bí danh git được xác định từ xa, điều này sẽ làm cho tác vụ này được tích hợp nhiều hơn/dễ dàng hơn nhiều. Chúc mừng! – sdaau

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