Git svn拉取并提交到远程git

5

我的客户有一个SVN仓库,我想在我的一侧使用git。我使用git-svn从客户的svn中创建了一个git,并为其创建了一个gitlab。如果我的客户在他的侧面进行更改,我希望获取这些更改,然后更新我的gitlab以保持同步。

目前我正在使用:

git svn fetch 

如果有任何更改,我会得到一些更改。收到更改后,我仍然无法将更改推送到我的Git上。

git commit -am "Changed something"

返回结果:

您的分支与 xxx 一致

无需提交,工作目录干净

显然有些东西发生了变化,但我的 git 没有注意到。 我错过了什么?

1个回答

10

简述

如果您想让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

背景

从逻辑上讲,当你运行git svn fetch时,你会从SVN仓库接收新的提交(commits),而不是文件。

这就是为什么在尝试创建新提交时会出现错误消息的原因:Git告诉你工作目录中没有任何修改过的文件。

git svn fetch会将新的提交下载到你的仓库中,但它不会自动将其合并到当前分支。要执行此操作,你应该运行:

git svn rebase

以下是文档中关于此的说明:

您可以运行git svn fetch命令来获取新数据,但git svn rebase命令会执行获取并更新您的本地提交记录。

请注意,在运行git svn rebase命令时,你的工作目录不应该有任何已修改的文件:

在运行此命令之前,请确保您的工作目录干净。如果您有本地更改,则必须在运行git svn rebase命令之前要么将其存储或暂时提交 - 否则,如果看到合并冲突,命令将停止。

在提交被获取并合并之后,您可以通过以下方式将它们发布到您的GitLab存储库中:

git push origin

其中 origin 是指向 GitLab 存储库的远程名称。


听起来不错。不幸的是,在你回答之前我尝试了很多次,现在当我使用“git svn rebase”时没有任何变化,但也无法将任何内容推送到我的gitlab。没有变化...但我知道必须有...一旦我让它工作,我会将这个答案标记为正确的。 - MikeB
1
为了解决问题,我不得不重置到早期的版本。使用“git svn info”获取我的git svn的最新版本。然后我使用该版本-1进行“git svn reset -p xxxx”。之后,我可以像你说的那样使用“git svn rebase”和“git push”。谢谢! - MikeB
你对git svn fetch和git svn rebase的解释解答了我长期以来的一个问题!如果最终需要使用git svn rebase来实际使用svn的更改,为什么还会有人使用git svn fetch呢?那些提交的目的是什么? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接