2016-01-09 28 views
2

我很难找出一个好的标题,所以如果你有一个想法如何以更清晰的方式表达我的问题,请编辑。已经存在的SVN项目的常见git回购

我正在使用SVN的大项目。由于我习惯于使用git(经常提交,与许多分支机构合作),也不想更改我的工作流,因此我在SVN工作副本的父目录中设置了一个git存储库,以进行本地版本控制。所有SVN相关文件已包含在.gitignore中。使用git-svn对我来说不是一个真正的选择,因为我不想用我所有的小提交“污染”SVN回购。

现在我已经开始在同一个项目上与另一个人(叫他B人)的工作密切相关的工作。然而,他并没有准备好将自己的工作推到SVN仓库中,所以最初他手动给了我他更改过的文件,并将它们包含在我的分支topic的项目中。由于这个过程非常费力,我们决定使用git来交换项目的进度。

因为我不想与人B的SVN一塌糊涂,我的想法是以下几点:

  • 我创建了一个裸露的回购从我的混帐回购协议,并把它这是由人访问的服务器上乙
  • 某乙运行git init,复制了我的.gitignore文件,运行git add .,使他最初提交
  • 某乙重命名自己的分支topic,增加了裸回购我远程origin创建和获取所有数据

由于我已经将他的工作包含在我的回购库中,因此人员B的topicorigin/topic现在应该没有任何区别。但他们这样做。我曾经遇到过

两个问题(有可能更多):

  • 某些文件已被添加到,即使他们是.gitignore名单上(这是工作的完全相同的文件某乙的混帐回购协议对我罚款)
  • 当运行git diff topic origin/topic它显示一个文件删除两个话题和来源/主题,这肯定存在(以产地/话题道:/dev/null

没有任何人有一个id ea这里发生了什么问题?也欢迎提供替代方案的建议,但请注意,B人员在整个项目中将他的更改推向SVN回购和/或完全放弃SVN是没有选择的。

+1

当你说你不想用小提交污染SVN回购时,我很困惑。你的提交直到你推动才会触发SVN,所以你可以在推送前清理你的历史记录,一切都会好的。我在与Mercurial合作时正在做类似的事情。 – Ben

+1

我不想使用git-svn的另一个原因是我想100%肯定不要搞乱任何东西。此外,我想保持我的提交历史是这样,但仅限于我自己。但是,感谢您的反馈! – LLang

回答

1

注:OP LLang结束in the comments

事实证明,简单地复制.git文件夹(从回购我collegue从裸回购我把服务器上克隆),到他保持的地方了工作副本做了伎俩。


原来的答复:

使用git-svn是不是真的一个选项,因为我不想“污染” SVN回购与我所有的小提交之间。

你仍然可以使用git-svn,在独立分支机构工作,并且merge squashing你的提交到与svn同步的分支。

某些文件已被添加到人B的混帐回购协议,即使他们是在.gitignore名单上(这是为我工作得很好完全相同的文件)

的差异(不同的操作系统,不同的git版本,不同的shell,不同的路径)。
尝试并重做您的工作站上的相同操作,看看它是否仍然按预期工作。

当运行git diff topic origin/topic它示出了一个文件作为删除在两个topicorigin/topic这肯定的情况下(在origin/topic路径:/dev/null

/dev/null should means new file or deleted file
不知道文件被删除的原因,至少要复制它并将其添加到B的一面。

+0

感谢您的建议。在几个星期的更重要的事情之后,我有时间回到这里,事实证明,只需将.git文件夹(从我从服务器上放置的裸回购库中克隆的同事的回购)复制到他保持他的工作副本的伎俩。不过,我仍然不知道为什么最初的想法不起作用。 – LLang

+0

@LLang太棒了!我已将您的评论纳入答案中,以获得更多的知名度。 – VonC