2012-02-09 24 views
0

編輯:我看到這個問題已被問過! git-svn: reset tracking for master具有正確權限的人可能會將其作爲副本關閉。Git-SVN合併失去了我的鏈接到主幹

我使用的是git-svn。我最近完成了一個在git中跟蹤SVN分支的分支。在分公司工作時,我使用以下兩個命令:

$ git svn rebase 
$ big svn dcommit 

並且一切都很好。 git中的「master」跟蹤svn/trunk和git中的「myBranch」跟蹤svn/branches/myBranch。但在我合併本地所有東西后git

$ git checkout master 
$ git merge myBranch 

我去推...並假定主將推到svn /主幹。但事實並非如此。相反,「主人」現在也推到svn/branches/myBranch。不知何故,當我將「myBranch」合併到「master」中時,「master」的跟蹤被修改了。

我可能這樣做不對 - 但我想明確地「推」到主幹...

$ git svn dcommit remotes/trunk master 

但是,這句法失敗,現在我已經得到了

$ Committing to http://<repo>/trunk ... 
dcommitted on a detached HEAD because you gave a revision argument. 
The rewritten commit is: b461234... 

與SVN後備箱仍未更新。

如何在git中合併,然後將其推送到SVN?我按照指南here,這意味着我可以與正常的git語法合併。它只是沒有跟進,並解釋了爲什麼我的「主」沒有跟蹤我合併的分支。

我也有git-tower,我用命令行並行手動合併後,我現在塔「顯示」下拉列表中的所有遠程分支以「push」或dcommit,但我無法更改從svn/myBranch中的選擇......這可能意味着我不能?

回答

0

如果master正在跟蹤您的svn遙控器,你可以做:

git svn dcommit 

當你在master。使用--dry-run來查看您的提交目標是確定的!如果它壞了,你可以編輯.git/config和修復你的svn-remote項:

[svn-remote "svn"] 
    url = svn+ssh://some.machine.net/svn/path/to/tree 
    fetch = trunk:refs/remotes/trunk 

或不管它必須這樣做。

0

不,你不能提交git合併到Subversion。

閱讀從你給的鏈接本款約branching issues with git svn

當你熟悉了Git的工作流程,你可能會創建一些特性分支,也對他們的工作,然後將它們合併。如果你通過git svn推送到Subversion服務器,你可能希望每次將你的工作重新分配到一個分支上,而不是將分支合併在一起。之所以選擇rebasing是因爲Subversion有一個線性歷史記錄,並沒有像Git那樣處理合並,所以當把快照轉換成Subversion提交時,git svn只跟隨第一個父節點。

在帶有合併歷史記錄的分支上運行dcommit可以正常工作,只是當您查看Git項目歷史記錄時,它沒有重寫您在實驗分支上提交的任何提交 - 相反,所有這些更改都顯示在單一合併提交的SVN版本。

當其他人克隆那個工作時,他們所看到的就是合併提交,並且所有的工作都被壓縮了;他們沒有看到提交數據的來源或提交時間。

+0

根據我所包含的鏈接,我猜以下內容具有誤導性,因爲雖然有限,但我認爲文本暗示它仍然有效....現在,如果您想將歌劇分支合併到主幹中你的主分支),你可以使用正常的git合併來完成。但是你需要提供一個描述性的提交信息(通過-m),否則合併將會說「Merge branch opera」,而不是有用的東西。 – 2012-02-09 18:45:32

+0

請記住,雖然你使用git merge來完成這個操作,並且合併可能會比在Subversion中容易得多(因爲Git會自動爲你檢測合適的合併基礎),但這不是一個正常的Git合併提交。你必須將這些數據推送回Subversion服務器,該服務器無法處理跟蹤多個父代的提交;因此,在您將其推入後,它將看起來像是一次提交,它在一次提交下壓縮了另一個分支的所有工作。 – 2012-02-09 18:45:58