如何正确初始化具有非标准布局的存储库的 git-svn 克隆?
How to properly initialize git-svn clone of a repository with nonstandard layout?
我正在尝试使用 git 和具有以下粗略布局的 svn 存储库:
RepositoryHone
- -> Documents
- -> ExtraDocuments
- -> playground
- -> playground_dev
- -> playground_balance_change
- -> Tools
其中 playground 包含主要开发分支 (t运行k),playground_dev、playground_balance_change 和其他未显示的分支。
在分支中,布局如下:
- -> build
- -> lib
- -> bin
- -> src
我主要想使用 playground 和 playground_dev,所以我有 运行:
git svn init svn::/server.address:port/RepositoryHome -T playground -b playground_dev
git svn fetch
然而,当我 运行 git branch -r
检查分支是如何导入的时,我越来越恐惧地发现,除了 "origin/trunk","branches"例如 "origin/bin"、"origin/lib"、“origin/src”等。
我如何确保本地工作 copy/git 存储库和服务器之间的分支映射正确?
是否可以在不完全提取的情况下解决这个问题,因为这个过程需要很多时间(大约 16 小时)?
对于git svn
选项-b
并不意味着"this is a branch",它意味着"this is a directory where all subdirectories are branches"所以git svn init -b playground_dev
将playground_dev
的子目录作为分支.
我看不出有什么简单的方法可以解决这个问题。我建议将两次克隆到单独的存储库中并合并这些存储库。类似于:
git svn clone svn::/server.address:port/RepositoryHome -T playground playground
git svn clone svn::/server.address:port/RepositoryHome -T playground_dev playground_dev
cd playground
git fetch ../playground_dev trunk:playground_dev
cd ..
rm -rf playground_dev
最后一个命令从目录 playground_dev
获取分支 "trunk" 到当前目录中的新分支 "playground_dev"。
问题可以分两步解决。
首先,删除所有错误跟踪的分支。
向存储库添加正确的分支。
要删除有问题的远程引用,可以使用 git branch -r
找到它们,然后使用 git branch -D
.
删除它们
我还没有找到 "proper" 第二步基于命令行的解决方案,但幸运的是 git-svn 文档,更具体地说 Configuration section 提供了足够的细节来手动做事.
最重要的是,不能只设置一个分支来跟踪svn remote;在配置中只识别 "branches" 键,这需要使用通配符替换。
因此,可以只添加另一个 svn 远程 - 手动,在 .git/config
中,复制一个已经存在的,更改远程名称和 "fetch" 键的值。这样就可以设置一个对应于单个远程 svn 分支的分支,然后照常工作。
我正在尝试使用 git 和具有以下粗略布局的 svn 存储库:
RepositoryHone
- -> Documents
- -> ExtraDocuments
- -> playground
- -> playground_dev
- -> playground_balance_change
- -> Tools
其中 playground 包含主要开发分支 (t运行k),playground_dev、playground_balance_change 和其他未显示的分支。
在分支中,布局如下:
- -> build
- -> lib
- -> bin
- -> src
我主要想使用 playground 和 playground_dev,所以我有 运行:
git svn init svn::/server.address:port/RepositoryHome -T playground -b playground_dev
git svn fetch
然而,当我 运行 git branch -r
检查分支是如何导入的时,我越来越恐惧地发现,除了 "origin/trunk","branches"例如 "origin/bin"、"origin/lib"、“origin/src”等。
我如何确保本地工作 copy/git 存储库和服务器之间的分支映射正确?
是否可以在不完全提取的情况下解决这个问题,因为这个过程需要很多时间(大约 16 小时)?
对于git svn
选项-b
并不意味着"this is a branch",它意味着"this is a directory where all subdirectories are branches"所以git svn init -b playground_dev
将playground_dev
的子目录作为分支.
我看不出有什么简单的方法可以解决这个问题。我建议将两次克隆到单独的存储库中并合并这些存储库。类似于:
git svn clone svn::/server.address:port/RepositoryHome -T playground playground
git svn clone svn::/server.address:port/RepositoryHome -T playground_dev playground_dev
cd playground
git fetch ../playground_dev trunk:playground_dev
cd ..
rm -rf playground_dev
最后一个命令从目录 playground_dev
获取分支 "trunk" 到当前目录中的新分支 "playground_dev"。
问题可以分两步解决。
首先,删除所有错误跟踪的分支。
向存储库添加正确的分支。
要删除有问题的远程引用,可以使用 git branch -r
找到它们,然后使用 git branch -D
.
我还没有找到 "proper" 第二步基于命令行的解决方案,但幸运的是 git-svn 文档,更具体地说 Configuration section 提供了足够的细节来手动做事.
最重要的是,不能只设置一个分支来跟踪svn remote;在配置中只识别 "branches" 键,这需要使用通配符替换。
因此,可以只添加另一个 svn 远程 - 手动,在 .git/config
中,复制一个已经存在的,更改远程名称和 "fetch" 键的值。这样就可以设置一个对应于单个远程 svn 分支的分支,然后照常工作。