2013-10-11 202 views
3

基本上我正在編寫一個crontab任務,每隔1分鐘檢查一次遠程git存儲庫。如果有變化,它會將它們拉到(到本地回購),通過每個提交併在每次提交時運行一個咕嚕硒任務。如何檢查您的本地git存儲庫是否最新

有點卡住的部分是如何找出遠程git存儲庫是否有新的內容,我需要拉!

+3

只是一個一般的評論:而不是輪詢每分鐘,這聽起來非常低效,不會更好(如果可能)使用[鉤子](http://git-scm.com/book/en/Customizing -Git-Git-Hooks)直接在您的遠程回購? – codeling

+0

它是一個運行在無頭服務器上的crontab任務。它可以處理它。但我會考慮在後期添加它。 – Abramovick

+0

我確定幾乎每臺機器都可以處理它,只是當你能夠使用掛鉤時它不是必需的 – codeling

回答

9

您可以使用git ls-remote找到了:

git ls-remote origin master 

此命令會得到主分支的最新SHA-1的ID,您可以根據需要指定爲許多分支,或者沒有讓他們所有。您可以使用它與本地分支進行比較。

git fetch origin 

這樣,您將獲得「原產地/主」的更新:

但是,這樣你就不必做相同的網絡操作兩次,可能是更有效地獲取所有的變化,你可以與'主'進行比較,看看是否有更新。這不會合並或重新綁定,因此一旦檢測到有更新,您可以執行git pullgit mergegit rebase,無論您想要做什麼。

0

據我所知,兩個命令可能有幫助。對不起,如果我錯了。我appologies。

Git有兩個命令從遠程存儲庫中更新自己。 git fetch會使你與另一個repo同步,拉下你本地沒有的任何數據,並給你書籤,當你同步時,那個遠程的每個分支在哪裏。這些被稱爲「遠程分支」,與本地分支相同,但Git不允許您檢查它們 - 但是,您可以將它們合併,將它們分別分支到其他分支,在其上運行歷史記錄等。在同步後在本地進行。

將從遠程服務器獲取新數據的第二個命令是git pull。這個命令基本上會立即執行一個git fetch操作,然後在該遠程機器上進行git合併,然後由你當前所在的任何分支進行跟蹤。單獨運行fetch和merge命令會涉及到更少的魔法和更少的問題,但是如果你喜歡拉的想法,

假設你有一個遠程的所有設置,你想拉更新,你首先會運行git fetch [別名]告訴Git提取它所有的數據,你沒有,然後你會運行git merge [別名]/[分支]來合併到你當前的分支中,在服務器上看到的任何新東西(就像其他人在此期間推送的那樣)。所以,如果你正在與其他幾個人一個Hello World項目,並希望在已經推自上次連接的任何變化帶來,我們會做這樣的事情:

$ git fetch github 
remote: Counting objects: 4006, done. 
remote: Compressing objects: 100% (1322/1322), done. 
remote: Total 2783 (delta 1526), reused 2587 (delta 1387) 
Receiving objects: 100% (2783/2783), 1.23 MiB | 10 KiB/s, done. 
Resolving deltas: 100% (1526/1526), completed with 387 local objects. 
From github.com:schacon/hw 
    8e29b09..c7c5a10 master  -> github/master 
    0709fdc..d4ccf73 c-langs -> github/c-langs 
    6684f82..ae06d2b java  -> github/java 
* [new branch]  ada  -> github/ada 
* [new branch]  lisp  -> github/lisp 

在這裏我們可以看到,由於我們上次與此遙控器同步,因此已添加或更新了五個分支。 'ada'和'lisp'分支是新的,'master','c-langs'和'java'分支已經更新。在我們的示例中,其他開發人員將提議的更新推送到遠程分支進行審查,然後再合併到「主」中。

您可以看到Git製作的映射。遠程存儲庫上的'master'分支在本地成爲一個名爲'github/master'的分支。通過這種方式,您可以通過運行git merge github/master將該遠程中的'master'分支合併到本地'master'分支中。或者,您可以通過運行git log github/master^master來查看該分支上有哪些新的提交。如果你的遙控器被命名爲'起源',它將是起源/主控。幾乎所有使用本地分支運行的命令都可以使用遠程分支。

如果你有一個以上的遠程存儲庫,你可以從特定的人通過運行git fetch [alias]獲取或通知Git運行git fetch --all.

此外 的git的狀態命令與所有的遙控器的同步

git status命令顯示工作目錄和暫存區域的狀態。它可以讓你看到哪些更改已經上演,哪些沒有,以及哪些文件沒有被Git跟蹤。狀態輸出不會顯示關於承諾的項目歷史記錄的任何信息。爲此,你需要使用git log。

git status 

列出哪些文件是暫存,非暫存和未跟蹤的。

4
git fetch 
git log ..origin/master --oneline | wc -l 

它輸出拉動時應用的修訂(提交)的數量。

如果它大於0,則表示存在新內容。

相關問題