如何让GIT在我的案例中工作?

时间:2012-02-18 14:48:10

标签: git visual-studio-2008

我对Git有疑问。我工作的地方有2位开发人员:我自己和另一个人。我们都使用Visual Studio 2008开发VB.NET项目,所有代码和公司文档都存储在中央本地服务器中。

所以,如果我们两个人都必须在同一个项目上工作,我们会将Server1:/Code中存储的代码复制到我们的本地文档文件夹中,然后告诉对方我们正在使用哪些文件,这样我们就不会相同的文件。在一天结束时,我们将我们的位复制回服务器(确保我不会覆盖他的文件,反之亦然)。

我已经研究过Git,它似乎会解决这个问题“不要改变FileA的代码,因为我正在使用它”类型的问题,并且我们可以同时处理同一个项目:ie我们都从Server1获得代码的副本并开发,我们在一天结束时将两者合并回服务器(或者我错了?)。

现在我已经阅读了ProGit书籍的部分内容,我得到了添加文件和进行提交的位置,但我不确定我们两个人是如何能够立即使用它的。

这里有几个问题:

  1. 我将在哪里创建Git存储库?代码存储在Server1/CodeCode我们有各种项目,所以我想我必须在Server1/Code创建存储库?
  2. 在创建存储库之后,我们如何获得A中存储的项目Server1/Code/ProjectA的副本?我们只是复制粘贴文件夹还是使用Git?
  3. 因为我们每个人都会在My Documents拥有我们自己的副本并且全天都在处理该副本,我们将如何合并最后的文件以免丢失任何内容?假设我已经在VS2008中创建了一个新窗体,其中有一个按钮,后面有一些代码,另一个人在其他地方更改了一些代码?或者,例如,我向FormA添加了一些代码,他也向FormA添加了一些代码?我们如何在最后合并它们?
  4. 正如我所说,我已经在家里的电脑上安装了git和git扩展程序并且玩了它并且不介意使用git bash(命令行)或git GUI。

    任何帮助都将非常感谢大家。

3 个答案:

答案 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/ - 这将让您在几分钟内创建存储库。

  1. 您可以随时随地创建存储库。然后将已有的代码放入存储库中。
  2. 之后安装Tortoise SVN和/或SVNMonitor从/ push更新到存储库。第一次从存储库中签出代码。它会将所有代码下载到您指定的目录。
  3. 使用SVN还可以锁定文件进行编辑。这样,其他人将无法同时编辑它。但这不是建议的工作方式。通常合并不是问题,因为大多数时候你会处理其他东西然后你的同事。但是,如果您编辑同一个文件,则第一个人将在签到时成功,另一个人将收到有人更改该文件的消息。然后他将不得不用存储库中的版本更新他的文件版本并进行合并和签入。但通常合并是自动的。

答案 2 :(得分:0)

  1. 您将拥有三个Git存储库。一个中央存储库(裸),每个开发人员一个私有存储库。将中央存储库放在某处的服务器上,将私有副本放在硬盘上。

  2. 如果要获取代码的副本,请使用git clone。如果您要更新代码副本,请使用git pull,或使用git fetch后跟git merge(这是相同的事情)。不要手动复制带有Git存储库的文件夹。

  3. 每当您完成对项目的逻辑更改时,请将更改推送到中央存储库。如果其他开发者先推了,你就会发生冲突。所以你必须拉动其他开发人员的更改,将它们合并到你的代码中(或者如果你想要的话,可以使用rebase),然后重新推送。如果您对同一段代码进行了更改,则在本地计算机上合并时会出现合并冲突。您可以在本地解析合并,然后将完成的(已测试!)版本推送到中央服务器。

  4. 不要仅仅因为它是一天结束而推送到中央存储库。如果在一天结束时你正在进行一次更改,那么你最终会分享破坏的代码,这对你的合作伙伴没有好处。等到你完成更改后再推。

    作为替代方案,如果您正在进行某些操作,可以将其推送到中央服务器上的单独分支。