2009-05-25 73 views

回答

18

要做到這一點,最好的辦法是使用git svn作爲Subversion客戶端。這提供了Subversion存儲庫和Git存儲庫之間的雙向集成。一旦你擁有一個Git倉庫,你可以推送其他地方發佈它。

我這樣做定期,在工作中有一個Subversion版本庫是「主」庫中,並且我通常使用git svn來訪問它。有時候,如果我正在做的事情需要更多特定的Subversion功能,比如合併,我會使用常規的svn客戶端代替倉庫。

+12

這適用於單個用戶,但對於任何嘗試在團隊的兩個存儲庫之間建立實際橋樑的人來說,這是不夠的。 git在本地進行的任何更改都會被git svn rebase每次重新應用,任何後續的git推送到另一個git存儲庫將會重複推送相同的更改。 – 2012-06-13 01:05:14

1

當然一個更簡單的方式做到這一點是有主倉庫逗留顛覆,而是使用本地的git - svn的?

4

你可能會認爲svn2git很容易導入svn到git,然後它的鏡像ruby應用程序git2svn
更多詳細信息在this question
正如在其他的答案中提到,「git svn」是強制性的,但那些紅寶石模塊幫你尊重「顛覆分支/目錄」,而不是讓他們在Git的實際目錄。

2

我有一個裸露的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 

這主要是時間,但工程...

12

有你想要的執行完全是一個新的解決方案--- SubGit。它是併發安全的(我不能說基於git-svn的bash腳本一樣)。

+0

這看起來很有希望,謝謝。 – 2015-10-28 07:54:42

8

我們的團隊有完全一樣的問題,有點實驗後,我們設法拿出一個混帳顛覆橋同步我們的團隊的Git倉庫和企業Subversion版本庫之間的變化。我們的git使用對其他Subversion用戶是透明的。

的設置進行了更詳細的描述https://github.com/mrts/git-svn-bridge

我們已經在生產中使用了這種設置超過一年。

我想設置的最大警告是git倉庫只跟蹤SVN主幹(或另一個單一分支),因此其他git分支將在合併到主幹期間被壓扁到一個提交。對我們來說這不成問題 - 我們使用短命任務分支並將它們視爲輕量級的短暫「工作單元」,可以在單個塊中進入主線 - 並將分支歷史保留在git中。

相關問題