![](/img/trans.png)
[英]How to merge changes in a Git branch into 'trunk' of SVN by using Git only
[英]How to Git merge a branch that only contains a subfolder of trunk?
我目前正在使用svn(服務器為1.4版,這意味着沒有可用的現代合並工具)進行項目。
我想合並一個分支,並在其中工作幾個星期。 問題在於創建分支時,它只是作為子文件夾的副本而創建的。
項目的SVN結構:
/trunk/folder1
/file1
/file2
folder2
folder3
...
現在,我正在努力將分支合並回主干。
現在的問題是創建分支的那個人只復制了/ trunk / folder1而不是整個主干。 這給git-svn帶來了一個問題,因為它認為我在該文件夾中創建了一堆文件。
git co master
git merge branch1
...
create mode 100644 trunk/file1
create mode 100644 trunk/file2
(假設文件最初位於/trunk/folder1/file1
)
我之所以不使用svn的最初原因是因為沖突太多。 ( svn merge
需要服務器1.5+,而我們僅在1.4上, svnmerge.py
一次只能合並小塊數據,並且需要很多精神負擔...我用了半天的時間才完成一半)
使用git merge
看起來很有希望,但是首先我需要告訴git使用我的master分支的子文件夾作為合並目標。 怎么做?
subtree
合並策略是專門為該用例創建的。 它在遠程分支中查找與本地分支的子目錄中的文件匹配的文件,如果找到了它們,則在調用“常規” recursive
合並策略之前,它將重寫所有路徑以使兩個目錄結構匹配。
所以,嘗試
git merge -s subtree branch1
看來您需要使用子樹合並策略。
對於第一次合並 ,請查看以下參考資料:
/usr/share/doc/git-<version>
應在Git文檔中以howto/using-merge-subtree.html
出現)。 或者使用Avery Pennarun的git-subtree工具,該工具在Git wiki的InterfacesFrontendsAndTools頁面上提到。
對於后續合並 ,足以指定子樹合並策略:
$ git pull -s subtree <remote>
要么
$ git merge -s subtree <branch>
對於一次性解決方案,我會在本地git repo的工作副本中使用該煩人的“子文件夾分支”,為安全起見從一個臨時工作分支(“ tmp-subdir”)中分支出來,然后在其上使用git filter-branch
工作分支將其所有文件移動到正確的位置。
由於可能缺少“ trunk”的其余文件,因此我將分支到“ trmp-trunk”分支,然后將所有更改集從“ tmp-subdir”重播/ cherry-pick到“ tmp-trunk” ”。
然后應該可以將其與“ trunk”合並。
這應該起作用,但是可能有人會想出一種方法來實現相同的目的。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.