为什么 `git svn clone` 不转换所有 SVN 分支?
Why does `git svn clone` not convert all SVN branches?
我有一个 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/
只有三个SVN分支在~/git_full/.git/refs/remotes/origin/
下被转换为远程分支引用:
~/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
三次了,而且总是这些。据我所知,他们没有什么特别之处。
您的 tree refs/
命令可能不会显示所有引用,因为 git 最终会将它们打包到文件 .git/packed-refs
中。这在 git pack-refs 手册中有解释:
Traditionally, tips of branches and tags (collectively known as refs)
were stored one file per ref in a (sub)directory under $GIT_DIR/refs
directory. While many branch tips tend to be updated often, most tags
and some branch tips are never updated. When a repository has hundreds
or thousands of tags, this one-file-per-ref format both wastes storage
and hurts performance.
要显示所有内容,请使用
git show-ref
or git for-each-ref
.
我有一个 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/
只有三个SVN分支在~/git_full/.git/refs/remotes/origin/
下被转换为远程分支引用:
~/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
三次了,而且总是这些。据我所知,他们没有什么特别之处。
您的 tree refs/
命令可能不会显示所有引用,因为 git 最终会将它们打包到文件 .git/packed-refs
中。这在 git pack-refs 手册中有解释:
Traditionally, tips of branches and tags (collectively known as refs) were stored one file per ref in a (sub)directory under $GIT_DIR/refs directory. While many branch tips tend to be updated often, most tags and some branch tips are never updated. When a repository has hundreds or thousands of tags, this one-file-per-ref format both wastes storage and hurts performance.
要显示所有内容,请使用
git show-ref
or git for-each-ref
.