2014-02-20 53 views
0

我想創建一個克隆Github存儲庫的簡單腳本,將存儲庫的工作目錄更新到最新版本,無論哪個分支可能位於,然後運行其測試。在Git中,如何從遠程存儲庫簽出或更新到最新版本?

要水銀做到這一點,我可以使用以下步驟:

hg clone https://hghub.com/user/my-repo my-repo 
cd my-repo 
hg update tip 

什麼混帳相當於hg update tip

回答

1

正如託雷克說,沒有內置的方式,因爲這不是git的工作方式。

但是,您可以推出自己的方法,儘管它有點牽扯。

你可以用幼稚的做法,其中列出了在風格都提交走,它們進行排序數字(%ct是在Unix紀元格式,它是秒數自1970年開始提交時間,所以他們那種好聽)取最後一個,削減了剛散,並檢查了這一點:

$ git checkout `git log --all --format='%ct %H' | sort -n | tail -1 | cut -d' ' -f2` 

但是,讓你在一個分離的頭狀態,因爲你通過哈希檢查出來,而不是通過參考。

一個稍微天真的,更長的方法是獲取所有已知的分支,即分支頭,並通過類似的過程運行這些分支,最後切除分支ref並檢查:

$ git checkout $(for b in `git br | sed 's/..//'`; do echo `git log -1 $b --format='%ct %H'` $b; done | sort -n | tail -1 | cut -d' ' -f3) 

可能是邊緣的情況下,但我不知道他們。提交時間應該是的順序很好,因爲創建提交的所有內容,例如commit,cherry-pick,rebase,commit --amend等都會更新他們正在複製的提交的提交時間。換句話說,你不能將一個無序的日期插入分支的中間。如果你在某個分支上挑選了某些東西,它會以最新的提交時間排在最前面。如果你重新綁定,每次提交都是從下到上依次進行的,所以他們也會按順序進行。

也就是說,rebase操作通常會以大於每秒1次的間隔創建提交,在這種情況下,您將提交完全相同的提交時間,並且它不會得到比任何更精細的提交(我有時希望它),所以這裏的排序操作很可能會混淆提交匹配時間戳的順序。你可以嘗試在這一點上使用作者時間來幫助解決問題,但是這開始變成一個更復雜的函數,不再是一個相當簡單的shell管道。另外,我不確定這將永遠是多麼正確。可能會有瘋狂的邊緣案例。

+0

我不打算推​​回任何東西從這個回購,所以它看起來像第一種方法將適用於我的情況。謝謝! – klenwell

+1

提交時間戳的另一個問題是您依賴於提交者的時鐘。例如,如果我把自己放回到七十年代初期並作出承諾,其中的郵票將非常小;如果我將自己置於遙遠的未來,每次都會選擇提交。 (或者我可以使用'GIT_COMMITTER_DATE'來覆蓋時鐘,但這比意外更惡意:-)) – torek

+0

我同意torek。在編程中尊重時間是非常困難的,這就是爲什麼我認爲git(再次)做出了一個很好的決定,並沒有太多的依據。查看Noah Sussman的兩篇文章:「錯誤的程序員相信時間」以及「程序員相信時間更多的錯誤;」人羣「版本」中的智慧爲了解時間在編程中如此難以處理的長篇大論。充其量,我上面的兩個「解決方案」是便利,但最好保持不穩定。 –

3

沒有一個。在Mercurial中,「小費」僅僅是編號最高的版本(使用相對的rev數字,因爲提交總是「添加到堆中」)。 (也就是說,在任何給定的回購中都存在提交的絕對編號,但是,當兩個不同的回購商已分散,重新同步時,特定提交的相對數可能不匹配,例如,假設Joe和我從每個「hg clone」開始 - 一個有6次提交的回購,我做了7次更改,它已經準備好出去了,但在我推之前,Joe提交了一個更改他的 rev 7和推動我們共同的中央回購,現在我拉動他的改變,這是我的第8回合;我合併我的第7和第8回,做出第9回合;我將我的第7和第9迴歸到中央回購中,他們在第8和第9回合[我的第8版沒有什麼反應,中央回購已經有了第7次提交]。我現在有了第8版,這是喬的和中央回購的第7版的變化; a nd我有rev 9作爲合併。如果他現在拉我的改變併合並,他將我的改變作爲他的第8版,並且合併爲9.因此在這一點上相對數目不再匹配。但是,當你進行初始克隆時,這無關緊要:你正在複製另一個回購,並且在這個過程中你也複製了它的編號。)

如果你可以獲得對方的git reflogs案例,github上的分支歷史),你可以看看最近哪個分支是前進的。這將代表最新的提交。或者,github可能會跟蹤這些內容,並允許所有人訪問它們(我對github不太瞭解)。

(你也可以看看在提交時郵票,但他們又是沒有必要在提交被添加到庫中的順序。)

+0

我懷疑這可能是這種情況。感謝您的詳細解釋。 – klenwell

相關問題