我知道thread表示rebase适用于teamMates的小更改,而合并适用于大的更改。
我在以下目录结构中保留了三个队友的三个Gits,我们都有相同的初始代码:
project
| - I
| - myTeamMate1
| - myTeamMate2
分支机构不在同一个Git中。这意味着我不能使用rebase和merge。 我使用vimdiff在teamMates之间同步更改。但是,这很费时间。
我试图制作以下目录结构,其中所有分支都在一个Git下,但是没有成功:
project
| - I - myTeamMate1 - myTeamMate2
但是,我为我和我的队友运行了克隆命令:
git clone <url>
我在为队友运行第二个克隆后收到错误消息
fatal: destination path 'dotFiles' already exists and is not an empty directory.
我应该与3人团队一起使用哪种目录结构,以便我可以使用rebase
和merge
命令?
答案 0 :(得分:10)
完成塞缪尔答案的其他一些想法。
与SVN不同,分支和目录在Git中完全不相关:拥有3个分支(团队中每个成员一个)并不意味着3个目录。这不是你在你的问题中的意思(因为你的目录实际上是3个Git存储库的3个根),但我更愿意明确地提及它以防万一;)
Git是DVCS,3个存储库可以在任何地方(不在同一台计算机上的3个目录中)。如果可以通过UNC路径(\\desktop\path\to\repo
)访问它们,则可以将它们指定为远程路径。
Git 克隆允许您获取对远程分支的引用,但不会创建跟踪本地分支,以便您获得同事的工作。 ruby模块“remote branches”可以提供帮助。
Be wary of rebase因为它重写了你的分支的SHA-1(因为你在另一个分支上重放你的提交):如果你的队友在你的分支上建立他们的合并,他们将必须合并每次所有你的提交,即使是那些已经合并的提交! 在这种情况下最好有2个分支:
答案 1 :(得分:5)
事实上,他们不是在你所声明的同一个git 中并不以任何方式限制你。 Git是分布式的,这意味着您可以在这些存储库之间进行获取,合并,变换等等。
查看git remote --help
,了解如何命名您的队友存储库,以便您可以轻松导入他们的更改 rebase 加入或执行合并。无需更改目录结构,您的目录结构完全可用。
答案 2 :(得分:5)
代码示例
跟踪远程分支
git remote add -t master Hnr git://github.com/userName/files.git
这不会下载你的分支。它只是编辑文件.git / config并添加了一些行,告诉Git如何远程获取数据的位置和方式。
要获得teamMate的分支,请运行
git fetch Hnr
要确定您确实拥有teamMates的分支,请运行
git branch -a
或只看你朋友的分支
git branch -r
上述两个命令最初引起了我的困惑,因为我不知道它们。这让我尝试了其他不必要的命令来为我分支。
拥有朋友分支的第二种方式
但请注意,您可以使用git-clone将您朋友的代码放到单独的目录中,如下所示
git clone UrlAtGithub
然后,您可以使用上面的Git-remote在Git仓库中使用分支:
git remote add master Hnr PATH/ToYourFriendRepo.git
结论:您可以使用两种方法为您的teamMate分支,无论是通过git-clone还是没有它。两种方式都需要使用git remote add
。后者的优点似乎是你需要少运行一个命令。前者然后再次向你的teamMates提供你的硬盘的整个回购。
请参阅Git的手册,了解如何更新远程分支机构。 (NB远程分支可以在您的计算机上。它不必在远程计算机中。您的分支也可以是远程分支,但这限制了您的工作流程。)
接下来,您可能希望将朋友的特定文件合并到您的分支机构。 在这种情况下,只需知道朋友提交的5个首字母即可合并文件。
[我不确定您如何执行以下操作:] 您需要运行,例如
git merge 76a32
您可以获得以下输出
CONFLICT (add/add): Merge conflict in shells/externalPrograms
Auto-merging shells/smallApps/extract
CONFLICT (add/add): Merge conflict in shells/smallApps/extract
Auto-merging shells/smallApps/extract~
CONFLICT (add/add): Merge conflict in shells/smallApps/extract~
Automatic merge failed; fix conflicts and then commit the result.
在这种情况下,您的文件与朋友的文件差别很大,而Git无法决定采用哪个文件。你需要显然运行以下
git rebase
你得到了
shells/smallApps/extract: needs merge
shells/smallApps/extract~: needs merge
cannot rebase: you have unstaged changes
练习1:但是,我现在陷入困境,因为我的Tig没有在我的Git树上显示我朋友的提交。 如何让你朋友的提交76a32到你的Git树哪个分支在你的Git中?
您现在可以解决问题了。问题在于我忽略了解决Git给我通知的冲突。 Google会在official Git site:
再次保存这一天如果存在冲突 - 例如, 如果同一文件被修改为两个 远程分支中的不同方式 和当地分公司 - 那你就是 警告 -
下一个问题是清理有问题的部分并再次合并。 您可以在有问题的文件中看到与以下类似的内容 - 玩得开心! (我终于遇到了真正的问题;)
alt text http://dl.getdropbox.com/u/175564/exampleGitProblemSolving.png
在Mac的FileMerge中衍生和合并dotFiles的问题
我需要更新我的Git,因为只有最新的Git才有difftool -command。您可以在thread找到解决方案。
Difftool允许您从终端启动FileMerge中的dotFiles。您无法在GUI中访问它们。它就像
一样git difftool master:README dev:README
添加新的远程帐户后,您在Github中的帐户出现问题
您的Github帐户可能已在.git / config中消失。在这种情况下,您需要运行以下代码
git remote add -f YourUserName UrlIn@form.git
然后你可能会注意到你不能通过
正常推送git push origin master
您可能会收到以下错误消息
fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
您也可以尝试以下命令来解决问题
git push Masi master
以及Masi,master和origin的2种排列中的所有3种。 但是,没有一个命令不起作用。
Exercise 2:如果您的远程列表中有teamMate,您如何提交您的github帐户?
Origin是您的实际外部git-repo的简称,例如,在Github。 您的变量来源的内容可能已被另一个远程仓库替换。 在这种情况下,我建议您通过
创建一个新变量git remote add github git@github.com:myLogin/myProject.git
请注意,您可以将origin2替换为github。 Origin只是命名repo的惯例。
然后您可以直接运行
git push github master
您的ssh-key中可能有密码。如果有,您可能会获得拒绝许可 - 警告。如果您这样做,请参阅thread。
答案 3 :(得分:4)
说实话,我开始尝试输入一个很好的,详细的响应......但是我已经比http://excess.org/article/2008/07/ogre-git-tutorial/更好地解释了这一点。他介绍了不同分支,遥控器和合并的使用。这也是在截屏视频中完成的,所以花一个小时,喝点咖啡,然后享受演讲。
特定于您的问题:您不应使用目录设置。 Git不像SVN使用分支文件夹那样处理目录分支。 git中的分支是完全不同的东西。虽然您可能没有设置中央存储库(我推荐它),但您应该设置一个主分支,以便每个人都将最终的,干净的工作提交给。
我的一个示例存储库在Wikimedia Commons处有一个屏幕截图。在我的例子中,“bartender”仅在tar块中提交他的代码,所以我必须自己导入它来管理它。 “master”(此处仅显示为remotes / elf / master)是一个公共的svn存储库,我导入并基于更改。 “专制”是我自己的代码基准,而“私有”是我保存配置文件的地方,其中包含我想要管理但从不发布的密码。检查私人的时间戳,您会发现他们没有与下面的分支对齐。这是因为我将分支转换为“专制”而不是合并。
你会注意到两个远程引用: elf和bard 。这是我的两台托管软件的远程机器。我可以按照自己的意愿将我的树枝推到那里。在您的情况下,您将拥有其他开发人员的远程存储库,并且他们将修改自己的分支。观看教程可以让您更好地了解它的工作原理。祝你好运:)