我的客户有一个SVN回购,我想在我这边使用git.我使用git-svn从我的客户的svn创建一个git并为它创建了一个gitlab.如果我的客户改变了他的意思,我想获取更改,然后更新我的gitlab以保持所有内容同步.
目前我正在使用:
git svn fetch
Run Code Online (Sandbox Code Playgroud)
如果有什么变化,我会得到一些改变.收到更改后,我仍然无法将所述更改推送到我的git.
git commit -am "Changed something"
Run Code Online (Sandbox Code Playgroud)
收益:
您的分支机构与xxx保持同步
无需提交,工作目录清理
显然有些事情发生了变化,但我的git不会注意到.我错过了什么?
如果要保持GitLab存储库与Subversion存储库同步,则应运行以下命令:
# Fetch the latest commits from SVN and merge them into the current branch
git svn rebase
# Push the new commits to GitLab
git push origin
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,当你运行时,git svn fetch
你正在接收来自SVN存储库的新提交 - 而不是文件.
这就是当您尝试创建新提交时收到该错误消息的原因:Git告诉您在工作目录中没有任何已修改的文件.
git svn fetch
将新提交下载到您的存储库,但它不会自动将它们合并到当前分支.要做到这一点,你应该运行:
git svn rebase
Run Code Online (Sandbox Code Playgroud)
以下是文档中有关它的内容:
您可以运行
git svn fetch
以获取新数据,但git svn rebase
执行获取然后更新本地提交.
请记住,运行时不应在工作目录中包含任何已修改的文件git svn rebase
:
但是,当你运行它时,你需要确保你的工作目录是干净的.如果您有本地更改,则必须先隐藏您的工作或在运行之前暂时提交它
git svn rebase
- 否则,如果该命令看到该rebase将导致合并冲突,则该命令将停止.
提取和合并提交后,您可以通过以下方式将它们发布到GitLab存储库:
git push origin
Run Code Online (Sandbox Code Playgroud)
其中origin
是指向GitLab存储库的远程名称.