2013-01-03 76 views
4

我正在與一個團隊合作項目。他們使用SVN,但我更喜歡git。雖然我可以通過簡單地改進SVN來更輕鬆地做到這一點 - 我寧願讓我的生活變得複雜並使用Gi​​t。SVN/Git/Bash

這裏是他們設置:

~/www(svn) 
    |  \ 
trunk(svn) mybranch(svn) 

我想有

/srv/git/www 

用樹枝樹幹和mybranch

當我做/srv/git/www而在主幹分支內的git拉如果腳本在~/www/trunk上運行了svn更新並且使用任何svn提交更新git分支,我就會喜歡它(這樣git歷史記錄和提交消息S中的SVN匹配,並提交信息)

它會做同樣的行爲對git pull的混帳mybranch分支

我的工作流程將被

git checkout trunk 
git pull 
git checkout mybranch 
git rebase trunk 

做了一些工作

(如果主幹沒有被更新,因爲我拉它):

git commit 
git push 
git checkout trunk 
git merge mybranch 
git push 

我會喜歡它,如果一個git鉤子然後觸發svn提交每當代碼被推送到任一這些分支。

請提供任何建議。我最初嘗試的只是使用SVN--但是因爲鎖定而感到非常沮喪,並且每當合併不好時我都要重新檢出,這讓我感到非常惱火。

如果有人有這樣做的更好的模型,請告訴我。否則,如果你能指示我如何用git來做到這一點,那將是非常出色的!我知道有一個git svn命令,但我不信任它 - 我希望上面更安全(儘管對我來說似乎有點瘋狂)。

謝謝!

+1

他們想要使用svn而不是git,這是瘋狂的。但這是另一個故事... –

+12

我不確定你在問什麼,但你知道'git-svn'吧?一個工具,讓你能夠從git訪問SVN? – Zoredache

+3

@Zoredache您的評論是我將作爲解決這個難題的答案。考慮回答這個問題,這個問題可能會被設置爲回答狀態。 –

回答

3

您已經描述過SubGit的工作原理。自2.0以來,它允許使用預接收Git鉤子(在'git push'上執行)在Git和SVN之間進行雙向轉換。要做到這一點來看你的機器上

$ subgit configure --svn-url <URL_of_repository_root> repo.git 
$ #adjust repo.git/subgit/{config,passwd,authors.txt} to set auth options, branches to translate and SVN<->Git authors mapping 
$ subgit install repo.git 

然後克隆repo.git(即使是在同一臺機器上只是爲了讓「前接受」掛鉤工作)

$ git clone repo.git myproject 
$ cd myproject 
$ #do something with master 
$ git push origin master 

每一個新的承諾,從到達'master'將被轉換爲SVN中的提交。默認情況下,其他分支也是如此。

3

我最初嘗試過使用SVN--但是由於它鎖定而感到非常沮喪,並且每當合併不好時我都會重新檢出,這讓我對SVN感到非常惱火。

我真的沒有注意到Subversion有你似乎有問題。我沒有經歷鎖定並與Subversion合併工作很好。事實上,我對Subversion合併的問題少於Git合併。我懷疑你的沮喪之處在於使用不熟悉的軟件,而不是Subversion本身的固有問題。我也對軟件無法使用的方式感到沮喪。

但是,您可能也可以使用Subversion而不是解決問題。你會一次又一次地碰到Subversion,因爲它在軟件世界很受歡迎。它使用起來很簡單,而且做得很好。在這個世界上,你可能更喜歡OS X和Linux到Windows,但你仍然需要知道Windows。我知道我也對不熟悉的軟件感到沮喪。但是,與Windows不同,Subversion並不是邪惡的。此外,它確實工作得很好。

我喜歡關於Git的一件事,我非常想念Subversion,它能夠在不影響主存儲庫的情況下提交我的工作。我在Git的工作流程是這樣的:

git checkout 
git pull 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git push 

如果你像我一樣的串行提交者,你可能會想嘗試Git-SVN:這可以讓你使用Git本地工作,做串行提交,但是當你做推並拉,你真的在​​與Subversion版本庫交談。但是,這並不意味着你可以簡單地假裝你只使用Git。當我分支和合並時,我仍然必須直接與Subversion交談。

如果你不是系列提交者,那麼Git-SVN可能不會給你多少錢。你最終所做的是增加複雜性和更多的挫敗感。

Subversion被設計用於不穩定主幹模型,用於持續集成環境。這意味着每個人通常都分享同一個分支。它迫使你和其他人一起玩,並且做出小幅度的增量變化。但是,沒有理由不能在Subversion中創建自己的私有分支並在那裏完成您的工作。

我做了很多代碼重組,這意味着要移動文件並做大量的工作,而這些工作在一天內無法完成。我不能在所有其他開發人員正在使用的同一分支上工作,所以我創建了自己的私人分支。如果任何人都應該合併問題,那就是我,因爲我不只是在這裏或那裏修改文件,我正在改變代碼的整個佈局。然而,Subversion幾乎總是以合適的方式處理合並。我定期重新定義。當我完成我的工作時,我會毫無問題地完成大量交付。然後,我會刪除我的分支。