【发布时间】:2021-10-06 07:30:26
【问题描述】:
我有一个 SVN 存储库,我正在使用 git svn 将其转换为 Git 存储库。该过程不会始终如一地将 SVN 分支转换为 Git 分支,我正在尝试找出原因。
我从svn_source/ 目录中的 SVN 存储库开始。这是一个适当的回购,而不是工作副本。如果我将工作副本签入svn_wc/,我可以明确列出其分支:
~$ svn checkout file://~/svn_source/ ~/svn_wc/
~$ cd svn_wc/
~/svn-wc$ ls -A1h branches/
1.0
1.1
1.2
1.3
2.0
3.0
3.0-alpha
3.0-beta
3.1-test
当我随后使用git svn clone 将 SVN 存储库(不是工作副本)克隆到完整的 Git 存储库中时,
~$ git svn clone --stdlayout --no-metadata file://~/svn_source/ ~/git_full/
在~/git_full/.git/refs/remotes/origin/下只有三个SVN分支被转换为远程分支引用:
~/git_full/.git$ tree refs/
refs/
├── heads/
│ └── master
├── remotes/
│ └── origin/
│ ├── 2.0
│ ├── 3.0-beta
│ ├── tags/
│ └── 3.1-test
└── tags/
5 directories, 4 files
为什么只有这三个被转换?我已经运行了三次git svn clone,而且总是这些。据我所知,它们并没有什么特别之处。
【问题讨论】:
-
请显示
git show-ref的输出而不是tree refs/。 Git 不仅将分支存储在.git/refs之下的文件中,而且还存储在其他地方。 -
git show-ref将所有预期的分支显示为<hash> refs/remotes/origin/<branchname>行。所以我猜git svn clone正在克隆每个 SVN 分支。知道为什么这三个分支可能会被挑出来明确地放在.git/refs/中吗? -
查看我的答案加:“旧”分支已被打包到一个文件中,因为它们在最新的 SVN 修订版中没有更改。较新的分支在最新版本中更新得更频繁,因此(尚未)打包。