7

[更新]

有关更多详细信息,我尝试在家里做纯 Git 的原因是,我的公司想迁移到 Git,但经理不喜欢做出改变,因为开发人员对我们自己的存储库上的 Git 不了解。所以,我尝试做的是,我尝试让每个人都使用 Pure git,而有人可以在这个学习阶段合并回 Subversion。所以,在任何紧急情况下,他们仍然可以使用 Subversion。

所以,在大家熟悉 Git 之前,我不能将存储库转移到使用纯 Git。因此,它将同时更新 Subversion 和 Git。(现在的主存储库是 Subversion)。因此,我尝试让 Git 在我通过 dcommit 将存储库同步回 Subversion 期间顺利运行。

[问题]

我在使用 Subversion 作为存储库的组织中,所以我将它作为我的个人 Git 转储(并计划在将来使用用 Git 替换 Subversion)

现在,我有同时使用GitSubversion (Main Source)的存储库。当我必须同时使用 git 和 subversion 时,我在处理git svn rebase时遇到了问题。

我的工作流程如下

在办公室

  1. Repository 有 Git-svn 接口
  2. 我总是从这里使用git svn dcommit将代码提交给 Subversion。
  3. 我在 Bitbucket 推送到我的远程 git 存储库

在家里

  1. 我从 Bitbucket 克隆存储库
  2. 使用并致力于 Bitbucket

现在,回到办公室

  1. git 拉
  2. git svn 变基
  3. git svn dcommit
  4. git 推送

在第 4 步中。我有一个问题,我已经重新设置了我的分支

问题现在在这里,当我回到家时

当我回到家时,我不能使用“git fetch”,因为分支已经重新设置了基础。所以,我必须用git branch -D .....删除分支,然后再次git checkout

所以,我寻找我们可以同时使用 Git 存储库和 Subversion 的方式,并在使用git svn rebasegit svn dcommit完成操作后与 Git 一起使用。

笔记。我不喜欢在家里使用任何git-svn 。尝试继续只使用 Git。

4

5 回答 5

2

好的,您的主要问题似乎是您无法真正git pull在家中进行历史记录已被重写(实际上它应该可以工作,但它会尝试进行不必要的合并)。

解决该问题的最简单方法是使用git pull --rebase. 这样,您无需将在家中所做的提交与远程分支的尖端合并,而是将自分支创建以来所做的每个提交重新设置在分支的尖端。Git 会足够聪明地看到一些提交是完全相同的,并且它们将在 rebase 期间被自动修剪。

于 2012-04-17T13:58:08.593 回答
2

我认为您的问题的主要原因是git svn dcommit更改提交消息以包含 SVN 提交数据。由于消息包含在提交的 SHA1 中,因此此更改在 git 看来是完全不同的提交。

我的解决方案是在您的办公室存储库中有一个分支,您与 SVN 同步另一个(纯 git)分支来完成您的工作。每当您想与 SVN 存储库交换某些内容时,您可以合并其中一个或其他方向。

就我而言,我设置了另一个专门用于 SVN 交换的 git repo。我有一个 cron 作业,它每 15 分钟将该存储库与 SVN 服务器同步一次。这样我就不会错过一个git svn rebase.

于 2012-04-17T14:44:33.697 回答
0

毕竟,您没有提到为什么要保留 svn 。但我的建议是一劳永逸地从一个干净的 git repo 开始。并避免不必要的问题。

我相信是凯西在迁移到 git 方面做出了最佳答案: 如何将具有历史记录的 SVN 存储库迁移到新的 Git 存储库?

当然,您必须进行备份,然后开始该过程。

另一个想法是,如果 rebase 是问题所在,为什么不使用纯 svn 更新,然后将更改提交到 Git(仅限 git commit),就好像你自己写的一样。

于 2012-04-16T21:59:32.233 回答
0

实际上,您应该可以git fetch使用. 那应该可以解决您的问题git merge origin/branchgit rebase origin/branch

如果它没有帮助尝试git fetch,那么git checkout -f -B branch origin/branch最后一个命令将强制从远程分支覆盖本地分支。

于 2012-04-17T14:25:03.503 回答
0

从使用 Git 的版本控制一书中找到了解决方案。第 295 页。

而不是使用本地 - 主分支,必须签出远程分支

git checkout remote/master (Detach HEAD)
git merge --no-ff master (merge the local master)
git svn dcommit
git push origin (update to git Repository)

此模型适用于将合并回 Subversion 存储库的人,而另一个人则在纯 Git 或纯 Subversion 上工作。通过这种方式,Git 用户可以在没有合并问题的情况下使用 Git。

于 2012-04-30T12:25:00.027 回答