簡體   English   中英

如何使用reposurgeon將svn repo轉換為git?

[英]How do I convert an svn repo to git using reposurgeon?

你能舉一個例子,我如何添加舊svn的路徑並從中創建一個git文件夾,其中包含整個歷史記錄和所有分支/標簽?

我發現這個網站值得一試嗎? 它使用svnpull ,這不是我的系統,我可以使用repopuller嗎?

我安裝了reposurgeon

apt-get install --no-install-recommends xmlto asciidoc unp
wget http://www.catb.org/~esr/reposurgeon/reposurgeon-3.7.tar.gz
unp reposurgeon-3.7.tar.gz
cd reposurgeon-3.7
make
make install

(我會在沒有建議的情況下安裝,因為這里不需要大約700MB)

看起來這個網站有點過時了。

svnpull現在被repopuller取代。 如果你在同一台服務器上,你也不需要它。

我改編了劇本:

nano /usr/local/sbin/reposurgeon-convert-svn2git

並輸入:

#!/bin/bash
PROJECT=myproject
svnrepo=svn+ssh://rubo77@myserver.de/var/svn-repos/$PROJECT
# or something like svnrepo=https://svn.origo.ethz.ch/$PROJECT

gitrepo=/tmp/$PROJECT-git

cd /tmp

# start over with:
#rm $PROJECT-mirror/ $PROJECT-git/ -Rf

echo 
echo pull/copy the repository...
#repopuller $svnrepo
# or copy it if it is on the same server:
cp -av /var/svn-repos/$PROJECT /tmp/$PROJECT-mirror
echo 
echo start conversion...

reposurgeon <<EOF
read /tmp/$PROJECT-mirror
prefer git
edit
references lift
rebuild $gitrepo
EOF
echo ...finished 

# now filter out all falsly generated .gitignore files:
cd $gitrepo/
git filter-branch --force --index-filter      \
 "git rm --cached --ignore-unmatch $(find . -name .gitignore|xargs )"  \
 --prune-empty --tag-name-filter cat -- --all

我過濾掉.gitignore文件,就像githubfilter-branch 記錄的那樣 ,否則,他們將在所有標簽中創建提交(參見下面的注釋)。 完成后,您必須創建一個新的.gitignore文件。

這可能需要一段時間,因此您應該在tmuxscreen內啟動它

tmux
bash /usr/local/sbin/reposurgeon-convert-svn2git

請注意,所有標簽都符合git。

我收到了錯誤

reposurgeon% reposurgeon: exporting...fatal: Branch name doesn't conform to GIT standards: refs/tags/version 3.6.2

所以我清理了svn存儲庫並刪除了這個分支,所以所有的標簽和分支都符合:

svn rm "$svnrepo/tags/version 3.6.2"

並使用此腳本從所有歷史記錄中刪除它: 如何完全刪除包含空格的SVN標記?

然后我開始使用腳本:

rm $PROJECT-mirror/ $PROJECT-git/ -Rf
bash /usr/local/sbin/reposurgeon-convert-svn2git

注意:
在沒有刪除.gitignore文件的情況下, 除了一件事之外 ,它在git中與SVN中的內容完全相同 :所有標記在日志中按照標記的確切日期排序,而不是它們開始廣告的提交。 似乎在轉換過程中將.gitignore文件添加到每個分支和標記,但是.gitignore文件導致在這些標記內部提交標記創建的時間戳。
新標簽沒問題,它們出現在它們所屬的修訂版中。 (請參閱將SVN存儲庫轉換為帶有reposurgeon的git而不創建.gitignore文件?

暫無
暫無

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

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