Git获取svn然后提交远程git

Mik*_*keB 3 svn git git-svn

我的客户有一个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不会注意到.我错过了什么?

Enr*_*lio 6

TL;博士

如果要保持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存储库的远程名称.