我想要使用GIT和SVN客戶端訪問存儲庫。我想通過自動雙向遷移來實現這一點:當用戶壓入GIT存儲庫時,它也在SVN存儲庫中進行COMMIT,反之亦然。有什麼辦法可以同步GIT和Subversion版本庫?
有什麼工具可以幫助我做到這一點?
我想要使用GIT和SVN客戶端訪問存儲庫。我想通過自動雙向遷移來實現這一點:當用戶壓入GIT存儲庫時,它也在SVN存儲庫中進行COMMIT,反之亦然。有什麼辦法可以同步GIT和Subversion版本庫?
有什麼工具可以幫助我做到這一點?
要做到這一點,最好的辦法是使用git svn
作爲Subversion客戶端。這提供了Subversion存儲庫和Git存儲庫之間的雙向集成。一旦你擁有一個Git倉庫,你可以推送其他地方發佈它。
我這樣做定期,在工作中有一個Subversion版本庫是「主」庫中,並且我通常使用git svn
來訪問它。有時候,如果我正在做的事情需要更多特定的Subversion功能,比如合併,我會使用常規的svn
客戶端代替倉庫。
當然一個更簡單的方式做到這一點是有主倉庫逗留顛覆,而是使用本地的git - svn的?
你可能會認爲svn2git很容易導入svn到git,然後它的鏡像ruby應用程序git2svn。
更多詳細信息在this question。
正如在其他的答案中提到,「git svn
」是強制性的,但那些紅寶石模塊幫你尊重「顛覆分支/目錄」,而不是讓他們在Git的實際目錄。
您可能還想看看這個解決方案:http://unethicalblogger.com/posts/2008/10/git_back_subversion_mostly_automagically_part_33,它用於同步git和subversion之間的repo,同時使用git和subversion的多個開發人員以及它們之間的代理來執行同步。
我有一個裸露的git中央回購+ SVN-混帳橋 - 用git SVN一個回購協議,在分支「當前」跟蹤SVN和分支「gitcentral」
然後我使用更新後的跟蹤Git倉庫鉤中央混帳回購這樣的:
#!/bin/bash
# Anything inserted into GIT - move it back to SVN
echo
echo '* Pushing data into SVN branch'
cd /home/git/BRIDGE
unset GIT_DIR
# current - svn branch locally and central git branch on project.git repos
# centralgit - unmodified centralgit branch
git fetch /home/git/repositories/project.git/ master:centralgit || (echo "Error while pulling data into bridge repository"; exit 1)
git checkout -b temp centralgit || exit 2
git rebase current || exit 3
git checkout current || exit 4
git reset --hard temp || exit 5
git svn dcommit || exit 6
git branch -D temp || exit 7
echo '* Pushed correctly data into SVN'
exit 0
這主要是時間,但工程...
我們的團隊有完全一樣的問題,有點實驗後,我們設法拿出一個混帳顛覆橋同步我們的團隊的Git倉庫和企業Subversion版本庫之間的變化。我們的git使用對其他Subversion用戶是透明的。
的設置進行了更詳細的描述https://github.com/mrts/git-svn-bridge。
我們已經在生產中使用了這種設置超過一年。
我想設置的最大警告是git倉庫只跟蹤SVN主幹(或另一個單一分支),因此其他git分支將在合併到主幹期間被壓扁到一個提交。對我們來說這不成問題 - 我們使用短命任務分支並將它們視爲輕量級的短暫「工作單元」,可以在單個塊中進入主線 - 並將分支歷史保留在git中。
這適用於單個用戶,但對於任何嘗試在團隊的兩個存儲庫之間建立實際橋樑的人來說,這是不夠的。 git在本地進行的任何更改都會被git svn rebase每次重新應用,任何後續的git推送到另一個git存儲庫將會重複推送相同的更改。 – 2012-06-13 01:05:14