簡體   English   中英

git-svn可以正確填充svn:mergeinfo屬性嗎?

[英]Can git-svn correctly populate svn:mergeinfo properties?

我正在評估git-svn並嘗試確定它與特定svn存儲庫的效果。 我主要關心的是讓git-svn執行合並,以便在subversion repo中正確設置svn:mergeinfo屬性。 這可能嗎?

這是我到目前為止所做的:

# Checkout the SVN repo.
$ git svn clone svn://server/project1 -T trunk -b branches -t tags

# Make sure we are working on trunk.
$ git reset --hard remotes/trunk

# Modify the working copy.
$ vim file.txt

# Commit locally to the git repo.
$ git commit -a

# Push the commits back to the SVN server.
$ git svn dcommit
Committing to svn://server/project1/trunk ...
    M   file.txt
Committed r178
    M   file.txt
r178 = b6e4a3a0c28e7b9aa71d8058d96dcfe7c8a2b349 (trunk)

現在,我將如何將該特定提交合並到一個subversion分支中? 同樣,對我來說非常重要的是git在提交更改時正確設置了svn:mergeinfo屬性。

盡管這是一個老問題,但自從被問到以來,git-svn的當前狀況已經發生了變化。 具體來說,在git 1.7.5中,當提交回svn時,對設置svn:mergeinfo的支持有限。

git svn dcommit現在接受-mergeinfo=<mergeinfo>標志。 引用1.7.5+手冊頁

-mergeinfo = <合並信息>

在dcommit期間添加給定的合並信息(例如--mergeinfo =“/ branches / foo:1-10”)。 所有svn服務器版本都可以存儲此信息(作為屬性),從1.5版開始的svn客戶端可以使用它。 git svn目前不使用它,也不會自動設置它。

但是在使用它時應該非常小心。 即使手冊頁上寫着“添加”,它的真正含義是“替換”。 也就是說, svn:mergeinfo屬性是根據傳遞的內容設置的,它不會將指定的修訂添加到現有的svn:mergeinfo 從我的錯誤中學習......

編輯:

看起來他們仍在努力進一步改善這一點。 git-svn 1.7.7開始 ,git-svn手冊頁中添加了以下文本:

config key:svn.pushmergeinfo

此選項將導致git-svn嘗試在可能的情況下自動填充SVN存儲庫中的svn:mergeinfo屬性。 目前,這只能在提交非快進合並時才能完成,其中除第一個之外的所有父級已經被推入SVN。

簡短回答:不,git-svn並不關心svn:mergeinfo屬性,因為git-svn沒有合並回svn(它正在進行提交)。

答案很長:大多數人使用git-svn來擺脫大腦損壞的svn合並。 svn的問題在於它不區分復制文件或文件夾(通常由重構引起)和創建分支,因為創建分支或標記是通過使用“svn copy”命令完成的。 svn:mergeinfo屬性是這個問題的創可貼,但仍然存在修改含糊不清的情況。 Git對分支和合並有更強大的支持。

好像他們正在努力。 在下一個版本中可能有可能:

http://git.kernel.org/?p=git​​/git.git;a=commit;h=6abd9332f97441a568421ba233ad8929b50a7efc

理論部分

問題是Subversion和Git有明顯不同的合並跟蹤機制。

因此,某些合並信息無法從Subversion正確轉換為Git。 例如,當SVN甚至在子目錄級別跟蹤它們時,Git根本不跟蹤櫻桃選擇。

另一方面,在Subversion中表示Git合並歷史沒有問題。 但是請注意,由於某些SVN文件/目錄屬性不存在於Git存儲庫中(例如svn:keywords),一旦您提交合並提交,這些屬性的修改將在SVN存儲庫中丟失。

實用部分

git-svn不會根據Git commit的所有父節點自動設置svn:mergeinfo屬性。 但是,您可以在提交相應的提交之前手動指定屬性的值。

看看SubGit ,它是git-svn的服務器端替代品。 它在可能的情況下在兩個方向上轉換合並信息。 它還支持svn:ignore,svn:eol-style和svn:mime-type等SVN屬性。

有關更多詳細信息,請參閱SubGit文檔SubGit與git-svn比較。

SubGit是一個商業產品,提供開源,學術和小型項目的免費選項。 我是SubGit開發人員之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM