是否可以確定我可以安全地從新的遠程倉庫中提取,即兩個倉庫共享一個共同的祖先?我正在編寫一個程序,可以自動克隆和更新大量的git,hg等存儲庫,並且我想無縫地處理遠程存儲庫移動到新URL的情況。看來,git將允許我從任何遠程拉,可能會產生巨大的衝突。 Svn擁有存儲庫uuid來確定您是否可以切換到新的url。我意識到git是分佈式的,並且意味着可以輕鬆分叉,所以uuid並沒有什麼意義,但是git中有沒有類似的功能?如何確定遠程git倉庫是否「安全」從
回答
您可以將add and fetch the remote branch存儲到您的存儲庫中,而無需將其合併到您的歷史記錄中。然後,您可以測試一下,看看是否有使用git merge-base
git remote add test-remote [email protected]:/path/to/repo.git
git remote update
git merge-base test-remote/master master || echo "No common ancestors!"
git中的「pull」僅僅是一個「獲取」,然後是「合併」到當前分支。當你這樣做,有沒有共享祖先遠程的Git「取」,你會得到這樣的警告:
警告:沒有共同的承諾
你應該能夠做到從URL中提取,然後檢測這個來自該操作輸出的消息。
此消息是否是獲取不相關歷史記錄的可靠指示器很大程度上取決於確切的使用情況。特別是,該消息不會出現重複獲取相同的不相關歷史記錄(除非本地存儲庫在提取之間被「清除」)。由於遠程追蹤分支的頭部在獲取期間將使用「有/無」協商,所以在通過定義的遠程獲取(即,獲取遠程追蹤分支而不是僅追入FETCH_HEAD)時,尤其如此。 – 2011-04-21 03:27:55
我認識了Git是分佈式的,意思是容易forkable,所以UUID並沒有真正意義上的共同祖先,但沒有任何可比性功能/功能在Git?
相反,git作爲分佈式版本控制系統非常有用的部分原因是,每個提交都有一個唯一定義該提交及其完整歷史的ID。 (這些是您看到的與git中的提交相關聯的哈希值,正確地稱爲「對象名稱」。)提交已被提取或推送到哪個存儲庫並不重要,它仍表示與樹完全相同的狀態以及完全相同的歷史記錄,包括作者身份等。
從你的問題來看,我不太清楚你是否想知道(a)是否有任何共同祖先或(b)是否有歷史記錄分支A完全包含分支B的歷史(即,將A合併成B將是「快進」)。
如果您在(a)之後,那麼Brian Campbell's answer就是您想要的,即基本上測試git merge-base test-remote/master master
是否成功返回。另一方面,如果你在(b)之後,那麼你應該測試git merge-base test-remote/master master
的輸出是否與git rev-parse --verify master
相同。
我想我可能想堅持(a),因爲用戶可能已經修改了本地回購協議,以避免快速轉發可能,但感謝您的詳細解釋! – 2011-04-23 19:08:04
- 1. 我如何將遠程git倉庫從工作倉庫改爲裸倉倉庫
- 2. 如何確定是否git倉庫是空的
- 3. 如何從遠程git倉庫獲取所有遠程URL?
- 4. phpstorm和git遠程倉庫
- 5. Git遠程倉庫合併
- 6. 替換遠程git倉庫
- 7. 從github遠程倉庫git導出
- 8. 從git shell中刪除遠程倉庫
- 9. 從git遠程倉庫下載文件
- 10. 如何獲得正確的GIT遠程倉庫URL
- 11. 如何使msysgit安裝遠程倉庫
- 12. 確定刪除本地git存儲庫是否安全
- 13. 如何優化遠程GIT倉庫 - 主要是Heroku
- 14. 如何將我的遠程git倉庫移動到另一個遠程git倉庫?
- 15. 將git倉庫克隆到它自己的.git目錄是否安全?
- 16. 是否可以直接從git倉庫安裝gem?
- 17. 從Git Gui推送到遠程Git倉庫的問題(windows)
- 18. 訪問遠程Git倉庫的URL
- 19. 推送到遠程git倉庫索引
- 20. 訪問遠程的Git倉庫
- 21. 像水銀創建遠程Git倉庫
- 22. 替換遠程git倉庫(Heroku)
- 23. 同步2個遠程Git倉庫
- 24. git登錄ssh遠程倉庫
- 25. Git遠程倉庫(帶文件?)
- 26. Git遠程倉庫註銷問題
- 27. Git reset --hard和一個遠程倉庫
- 28. 遠程Git倉庫和SSH協議
- 29. Git - 遠程倉庫只能獲取
- 30. 添加git遠程倉庫的問題
謝謝!看起來我需要更多地檢查「低級別」git命令:) – 2011-04-23 19:09:06