我在网上阅读了大量“从 svn 到 git”和其他“git-svn 工作流”文章,但我仍然认为它们经常处理过于简单的情况。他们通常针对那些只想在本地使用 git 和 hack,而不使用 git 的全部功能的人,例如 pull、fetch、merge 等多个开发人员之间的类似操作,这些开发人员都会使用 git-svn 克隆 svn 存储库,然后仍然希望能够随时将他们的更改推送到(官方)svn 存储库,并返回到 git 中工作并共享他们的东西等。
每当这些文章承认您不能在纯 git 中做所有事情时,后果和可能出现的错误从未得到明确解释(或者也许只有我?)。即使是 git-svn 手册页也提到了注意事项,但并不是很广泛。
根据我所读到的内容,我觉得以这种特定方式使用 git-svn 时可能会出现问题,我将在下面进行描述。谁能告诉我我的看法是否正确?
这是“想要”的做事方式:
- 我们在 svn 存储库中有一个项目
- 开发人员 A git-svn-clone 是 svn 存储库。他开始在本地进行黑客攻击
- 开发人员 B git-svn-clone 的同一个 svn 仓库。他开始自己破解东西。
- 这样做一段时间后,可能会添加开发人员 C/D/...,并让其他开发“标准”svn 的开发人员提交到原始存储库,git 用户会想要共享他们的代码并进行各种操作git 魔法。
- 这些 git 用户中的任何一个都希望能够将现在 merge 的更改推送到 svn(dcommit?)
我的问题是:我是在做梦吗?我前段时间在一本 git 书中读到,git-svn-clone 可以创建 git 存储库,它们当然是 svn 存储库的“镜像”,但是不同开发人员以这种方式创建的 git 存储库会有不同的“ids"和提交会有不同的哈希值。所以我的理解是那些 git 存储库不会共享任何共同的 git 祖先,因此将无法使用您需要共享、 merge 等的所有 git 命令。是真的吗,我们会在这个工作流程中遇到问题吗?
有时我读到这可以做到,至少使用一个“官方”裸 git 存储库,这将是唯一一个被 git-svn-clone 的存储库,所有 git 用户都必须从这个开始。然后你需要有人负责这个中央 git 仓库,并在将所有内容提交到 svn 仓库之前收集 git 开发人员之间的更改。这将是 git 用户“不知道”原始 git repo 来自 svn 的唯一方法,并让他们随心所欲地使用所有 git 命令。唯一需要精通 git 和 svn(并了解 git-svn 警告)的人是“merge 经理”(或他的称呼)。
我是否完全误解了 git-svn 警告?有没有更简单的方法来做到这一点?
最佳答案
我最近对此进行了很多试验,并认为我设法想出了一个有点管用的设置。是的,这是一个严格的 rebase-only 制度,是的,它很复杂,但您确实可以使用 Git 在本地工作(速度、历史、存储、索引等)。
我认为,当您与团队中的其他 Git 用户协作时,您可以在幕后使用分支,但我个人并没有对此进行太多试验。只要在提交之前将日志线性化,它就可以工作。
这是简短的版本(重复了很多已经说过的话):
- 将 Subversion 存储库克隆到中央服务器上的“获取”存储库中
- 在同一台服务器上初始化一个“裸”仓库
- 从fecthing repo推送到bare repo
- 让开发人员克隆原始代码库,然后
git svn init svnurl
配置 git-svn 远程,和git update-ref refs/remotes/git-svn refs/remotes/origin/master
所以 git-svn 有一个指向修订的指针
- 自动(提交 Hook )拥有“获取”repo svn rebase,并推送到裸 repo
- 开发人员使用
git pull --rebase
从裸仓库中 pull 数据
- 运行
git svn dcommit
的开发人员首先必须重复上面的update-ref
,以防来自 SVN 的更新版本。
有一个 illustration of the workflow on this page (我需要更多的声望点才能内联图像)。更新:我们开始:
关于svn - 同一个 svn 存储库的不同 git-svn 克隆是否期望能够共享更改然后 git svn dcommit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1880405/