2013-10-15 67 views
3

我的本地git存儲庫位於加密卷內。我希望只有當遙控器有新提交時才能運行git pull --all。但是,我無法使用像here這樣的post-receive hook,因爲我沒有加密卷的密碼。這意味着,即使掛鉤將被觸發,我仍然不知道裝入卷的密碼並拉取新的更改。所以我正在尋找一些其他的替代品,我想到的一種可能的方式是向遙控器詢問最新版本的SHA,並將其與本地副本知道的最新版本SHA進行比較,如果它們匹配,則我不需要運行pull命令,如果它們不匹配,那麼我需要運行git pull命令。我可以在沒有本地副本的情況下在遠程存儲庫上發出git rev-parse嗎?

有沒有一種方法可以在遠程存儲庫上運行git rev-parse master

你可以得到更多的背景我的問題here

回答

2

您無法按字面順序執行此操作。

有兩個簡單的近似值:

  • 如果你能在遙控器上使用ssh(或其他一些訪問),您可以運行git rev-parse甚至git rev-list在那裏,它可以讓你儘可能多的SHA-1作爲你要。
  • 您可以使用git ls-remote從遠程(包括refs/heads/master)獲取頭部 SHA-1。假設你在本地有頭部SHA-1,所有這些都會告訴你「相同」或「不同」。如果他們不同,你不能精確地告訴爲什麼(儘管你可能會得到 - 如果你走本地轉速)。

有一些奇怪的有關問題,但:你說本地回購是在對你沒有密碼的加密卷。如果是這樣,你怎麼知道當地的和/或他們的歷史?他們被記錄在回購中。

+0

非常感謝您回答我的問題。 'git ls-remote'是我正在尋找的命令。比較'git ls-remote'和'git rev-parse master'的輸出會告訴我我的本地回購是否更新。至於你的問題,你可能想看看[這裏](http://stackoverflow.com/questions/19374975/how-to-make-my-local-git-copy-always-at-its-latestversion - 自動)。我不知道加密卷的密碼,只有用戶知道密碼。所以他們也給我,然後我可以裝入卷(並運行git命令)。 – e271p314

+0

啊,好的。也許這種情況在這種情況下不適用,那麼:本地回購可能遠遠超過遙控器,因此遙控器的讀取或拉動無效;而且這兩者可能會發生分歧,所以抓取會帶來新的東西,但本地和遠程仍然不同步。例如,假設本地和遠程在(比如說)badcafe處於同步狀態,然後有人在本地執行'git commit',從而產生rev defaced。轉速數字不匹配,但沒有什麼可以'取';只有'push'可以使這些同步。 – torek

+0

這對我來說不是問題,因爲沒有人正在編輯加密卷中的文件。偶爾用戶要求系統從各種來源編譯二進制文件。每個源都是加密卷內的本地git回購。大多數回購並不需要只更新其中的幾個,而不是爲每個回購庫運行'git pull --all',我可以使用您的建議進行快速檢查,並且只對需要更新的回購庫運行拉。由於沒有人編輯本地存儲庫中的文件,所以我相信您的解決方案將會很好。再次感謝:-) – e271p314

0

你有什麼不想扯理由嗎?如果是因爲合併涉及牽扯,您總是可以發出git fetch以獲取標題並保持工作副本不變

+0

花太長時間,看看[這裏](http://stackoverflow.com/questions/19374975/how-to-make-my-local-git-copy-always-at-its-latest-version-自動)以獲得全部圖片。 – e271p314

相關問題