2011-05-04 134 views
1

我目前正在從一個項目上運行兩臺不同的計算機 - 運行Linux的筆記本電腦和運行Win7的桌面。我正在使用帶有gitolite的ubuntu服務器來託管我的回購。發現git中的本地回購和遠程回購之間的區別

我試圖寫一個快速腳本,將做兩兩件事:如果說有什麼對當地回購改變,自上次推

  1. 檢查。如果是這樣,它應該提交更改,將提交按鈕推送到遠程回購站012。我不知道這是如何工作的,但我不希望這個提交覆蓋我沒有在本地更改過的文件中的更改(即:它們可能已在另一臺計算機上被更改並被推送)

  2. 之後,它應該檢查遠程倉庫是否有自上次抽取後發生更改的文件(請參閱1a。)。如果是這樣,將這些更改拉入本地回購。

該腳本的目的是保持兩臺計算機彼此同步,而不必每次都手動完成所有這些git工作。我希望定期進行這種運行(每半小時一次),所以如果可能的話,我不希望它佔用大量資源。

我不需要爲我編寫的整個腳本(除非它只是一對線) - 只需指向我將需要的命令即可。

回答

1

比較器的輸出:

git ls-remote <remote> 
git show-ref 

雖然一般是什麼做的是獲取(不拉),遙控器和遠程分支機構與當地分行。如果您有非快速合併,則無法真正實現自動化,因爲在再次推送之前需要手動干預合併。

+0

因此,我可以使用git show-ref來檢查我的本地回購是否與遠程回購(步驟2)相匹配。第1步的任何想法?另外,有沒有辦法強制我的合併覆蓋那些非快進的東西?像git push -f? – jwegner 2011-05-05 02:49:27

+0

如果您執行git push -f,您可能會失去(永久)由推入回購的其他人所做的更改。如果發生這種情況,另一個人也將無法撤銷覆蓋的回購,而沒有發生重大沖突。我想你想使用'-s ours'選項來拉(或合併),這個選項會將樹合併到原始狀態,但它不會把對方的資源庫搞砸了(如果你的話他們的提交仍然存在需要恢復它們)。 – kanaka 2011-05-05 14:41:22