我对Git有疑问。我工作的地方有2位开发人员:我自己和另一个人。我们都使用Visual Studio 2008开发VB.NET项目,所有代码和公司文档都存储在中央本地服务器中。
所以,如果我们两个人都必须在同一个项目上工作,我们会将Server1:/Code
中存储的代码复制到我们的本地文档文件夹中,然后告诉对方我们正在使用哪些文件,这样我们就不会相同的文件。在一天结束时,我们将我们的位复制回服务器(确保我不会覆盖他的文件,反之亦然)。
我已经研究过Git,它似乎会解决这个问题“不要改变FileA的代码,因为我正在使用它”类型的问题,并且我们可以同时处理同一个项目:ie我们都从Server1获得代码的副本并开发,我们在一天结束时将两者合并回服务器(或者我错了?)。
现在我已经阅读了ProGit书籍的部分内容,我得到了添加文件和进行提交的位置,但我不确定我们两个人是如何能够立即使用它的。
这里有几个问题:
Server1/Code
和Code
我们有各种项目,所以我想我必须在Server1/Code
创建存储库? A
中存储的项目Server1/Code/ProjectA
的副本?我们只是复制粘贴文件夹还是使用Git? My Documents
拥有我们自己的副本并且全天都在处理该副本,我们将如何合并最后的文件以免丢失任何内容?假设我已经在VS2008中创建了一个新窗体,其中有一个按钮,后面有一些代码,另一个人在其他地方更改了一些代码?或者,例如,我向FormA添加了一些代码,他也向FormA添加了一些代码?我们如何在最后合并它们? 正如我所说,我已经在家里的电脑上安装了git和git扩展程序并且玩了它并且不介意使用git bash(命令行)或git GUI。
任何帮助都将非常感谢大家。
答案 0 :(得分:2)
鉴于Git的分布式特性,实际上有数百种不同的工作流程,所以这只是一个例子。
热门工作流程的另一个示例是here
我将在哪里创建GIT存储库?代码存储在 Server1 / Code和Code中我们有各种项目,所以我想我必须这样做 在Server1 / Code中创建存储库?
您将在Server1 / Code:
上创建存储库git init &&
git add . &&
git commit -am "Initial commit"
以上内容将所有内容添加到存储库中(您可能希望排除某些文件,因此首先将要从存储库中排除的内容放在项目根目录中的.gitignore文件中)
在我创建存储库后,我们如何获得副本,比方说 项目A存储在Server1 / Code / ProjectA中?我们会复制粘贴吗? 文件夹或使用GIT?
如果您使用共享,则可以使用git文件模式进行克隆:
git clone file:////<host>/<share>/<path>
因为我们每个人都会在“我的文档”中拥有自己的副本并继续工作 那个副本全天,我们将如何合并最后的文件 什么都不会丢失?假设我已经创建了一个新的表单 VS2008带有一个按钮,后面有一些代码和另外一个人 在其他地方更改了一些代码?或者,例如,我添加一些代码 FormA和他也为FormA添加了一些代码?我们如何将它们合并在一起 结束?
您通常在当地分支机构工作:
git checkout -b local_feature_branch
完成后,您可以使用git fetch origin查看“服务器”上的更改。这只会更新您对服务器上发生的事情的看法,它不会下拉变化。
当您准备好将更改推送到服务器时:
1)提交更改
git commit -am "My changes"
2)将服务器上的更改下拉到您当地的分支机构:
git checkout master && git pull origin master
3)将您的功能分支合并或重新绑定到本地主副本
合并:
git merge local_feature_branch
衍合:
git checkout local_feature_branch &&
git rebase master &&
git checkout master &&
git merge local_feature_branch
在下面的回答中阅读merge和rebase之间的区别:
Git workflow and rebase vs merge questions
如果存在冲突(例如,如果您同时编辑相同的表单等),git会告诉您存在合并冲突以及要合并的文件。完成合并后,您确实添加了合并文件:
git add merged_file
并提交:
git commit -am "Merged with master"
最后,您将更改推送回“服务器”:
git push origin master
答案 1 :(得分:0)
如果您从源代码控制开始,我建议从SVN开始。这更容易。
http://www.visualsvn.com/server/ - 这将让您在几分钟内创建存储库。
答案 2 :(得分:0)
您将拥有三个Git存储库。一个中央存储库(裸),每个开发人员一个私有存储库。将中央存储库放在某处的服务器上,将私有副本放在硬盘上。
如果要获取代码的副本,请使用git clone
。如果您要更新代码副本,请使用git pull
,或使用git fetch
后跟git merge
(这是相同的事情)。不要手动复制带有Git存储库的文件夹。
每当您完成对项目的逻辑更改时,请将更改推送到中央存储库。如果其他开发者先推了,你就会发生冲突。所以你必须拉动其他开发人员的更改,将它们合并到你的代码中(或者如果你想要的话,可以使用rebase),然后重新推送。如果您对同一段代码进行了更改,则在本地计算机上合并时会出现合并冲突。您可以在本地解析合并,然后将完成的(已测试!)版本推送到中央服务器。
不要仅仅因为它是一天结束而推送到中央存储库。如果在一天结束时你正在进行一次更改,那么你最终会分享破坏的代码,这对你的合作伙伴没有好处。等到你完成更改后再推。
作为替代方案,如果您正在进行某些操作,可以将其推送到中央服务器上的单独分支。