簡體   English   中英

如何使用push將一個git遠程鏡像到另一個遠程鏡像

[英]How to mirror one one git remote to another with push

問題很簡單。 我已經使用git cvsimport將cvs repo導入到本地git存儲庫中的遠程分支中。 然后,我希望將此存儲庫:branches,tags和all同步到雲中的git存儲庫(github / gitorious)。 要做到這一點,我無法訪問rsync或直接復制存儲庫,我必須使用git push。

如何鏡像我的本地存儲庫以便其他人可以訪問完整的_cvsimport_d歷史記錄?

具體來說:
我使用cvsimport導入和跟蹤存儲庫:

git cvsimport -i -v -C cdt-make-core -d :pserver:anonymous@dev.eclipse.org:/cvsroot/tools -r cvs org.eclipse.cdt/all/org.eclipse.cdt.make.core

以上導入org.eclipse.cdt.make.core進入git repo cdt-make-core中的遠程cvs

然后我可以將主CVS分支的HEAD推送到github:

git push github cvs/master:refs/heads/cvs/HEAD

(我明確指定了遠程路徑,所以如果它不存在則創建它。)

有沒有辦法同步所有分支:遙控器上的cvs / * => cvs / *?
有沒有辦法同步所有標簽?

我認為你正在尋找--mirror選項來推送:

git push --mirror github

這將推送所有引用(分支和標記),包括非快進更新。 我用它來創建本地存儲庫的備份。

手冊頁描述如下:

而不是將每個引用命名為push,指定將$GIT_DIR/refs/ (包括但不限於refs/heads/refs/remotes/refs/tags/ )下的所有refs/tags/鏡像到遠程存儲庫。 新創建的本地引用將被推送到遠程端,本地更新的引​​用將在遠程端強制更新,並且已刪除的引用將從遠程端刪除。 如果設置了remote.<remote>.mirror配置選項,則這是缺省值。

[OT:我在日常工作中使用CDT,我喜歡它!]

我的發現是,如果您使用下面的第二個合理解決方案,您需要首先執行--mirror ,因為它會清除您嘗試推送的那些cv / branches。 所以完整的公式是:

git push --mirror -v github
git push --force github cvs/master:refs/heads/cvs/HEAD
for x in `git branch -r | grep '^..cvs/[a-zA-Z0-9_-]*$' | sed -e 's/^..//'` ; do  
  git push -v github $x:refs/heads/$x
  git config branch.$x.remote github
  git config branch.$x.merge refs/heads/$x
done

經過實驗,我不相信對我想做的事情有任何內置的支持。

然而,似乎有兩個合理的解決方案:

  • 不要將-r指定為cvsimport。
    然后,導入的分支將直接存在於存儲庫中,並且--mirror可以像Pat建議的那樣使用。
  • 編寫一個shell腳本,一次推送一個* cvs / **遙控器(這很簡單)。
    使用--mirror以便正確同步標記

我最初想要將cvsimport d分支與namespacing分開。 但是,對於第一個選項,保持cvsimport存儲庫完全獨立(並且僅從中克隆)是有意義的。 然后,我可以繼續跟蹤CVS,而不會有跟蹤git repo弄臟的風險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM