作为唯一的开发人员(目前),我应该如何使用Git?[关闭]


60

我在Git上有多个项目,最终我希望将其引入其他项目。但是,现在只有我一个人,我非常简单地使用Git和GitHub:没有分支,基本上只是将提交用作本地文件的备份。有时我会回头查看文件的早期版本以供参考,但是到目前为止,我不需要进行任何回滚,尽管我很欣赏将来可能需要的选项。

作为唯一的开发人员,我现在可以利用Git或GitHub的哪些功能使我受益?我的工作流程应该怎样?

另外,是否有任何我需要开始做的特殊实践,以期望将来将其他人添加到我的项目中?


3
正如其他人解释的那样,Git为您提供了很多功能。但是,作为唯一的开发人员,您以后会感激的是,如果为您提供所做更改的记录(将多个文件中的更改分组为一组),进行更改的时间以及原因!当您成为团队成员时,这也是一种很好的做法。
Leading Geek 2014年

1
关闭,因为有趣。:)

@ user93458一如既往!封闭主题通常正是我要搜索的主题。
米洛斯拉夫·波波夫

绝不应该关闭的绝佳问题。
第一卷

Answers:


64

另外,是否有任何我需要开始做的特殊实践,以期望将来将其他人添加到我的项目中?

当然。即使您现在没有团队,也可以使用一个简单的好习惯:创建一个单独的分支进行开发。想法是master分支将仅包含已发布的代码版本或主要更改。加入您的项目的新开发人员可以轻松地采用此方法。

此外,即使您独自工作,分支也很有用。例如,您在编写新功能的过程中发现了一个错误。如果不使用分支,则必须同时执行以下两项操作:添加新功能并修复同一分支中的错误。这不好:P另一方面,如果您已经创建了一个用于创建新功能的新分支,则只需签出development分支,修复错误并签回新功能分支。

这只是一个简单的例子,说明您可以成为一名程序员。我确信必须有更多好的做法。

我强烈建议您这篇文章:成功的Git分支模型


+1-很有道理。我也将仔细研究该文章,它看起来非常有用。
VirtuosiMedia

我不是git专家,主要是Mercurial用户。在Mercurial的情况下,这个dev分支建议是否仍然有效?看起来确实如此,但是在这种情况下也许有些区别使其不是一个好主意?
克拉姆

2
是的,它几乎适用于所有源代码管理。我实际上是使用SVN向后进行的;“主”干线用于最新开发,每天更新,甚至更多。当需要发布时,代码被冻结并被分支剪切。该分支仅获得次要更新以解决主要发行版问题,然后从中创建可分发内容。这样,我在每个发行版本的后面都有一个源代码分支。如果提交是在标签之后但在发布之前进行的,那么这比简单地标记或标记b / c更好,您不知道它们是否被实际排除。
KeithS

为文章+1;@Klaim-是的,对hg也很有效。真的应该被称为“成功的DCVS分支模型”
Wyatt Barnett

+1感谢您的链接,它改变了我使用git的方式,虽然您不太介意,但正如他们所说的,一点点帮助!
Newtopian 2011年

14

我正是在这种情况下,但是我确实选择了使用Git的工作流程,虽然不一定更复杂,但稍微复杂一些。

最初的目标是学习git方法,因此我做了一些探索。然后恢复到您描述的工作流程。

一段时间后,由于出现某些情况而变得难以工作,这也给我带来了坏习惯,一旦我加入团队,就很难改变这种坏习惯。

所以我决定满足以下条件:

  • 用于工作的本地存储库。
  • 主分支作为应用程序的稳定中继
  • 每个功能/重构一个分支,基本上每个即将完成的更改都一个分支。
  • 当分支稳定并且所有测试通过时,合并回主干。

我还设置了一个git hub帐户,用于同步中继。这使我可以轻松地在不同的计算机上工作。这是有必要的,但允许我发现与其他计算机上不存在的环境相关的错误。因此,现在我养成了至少在一次不同的“原始”系统上尝试项目的习惯。当需要部署到客户时,为我省去了很多麻烦。

  • 我将使它成为github的每个版本标记为可发布版本。
  • 如果发布给客户,我将从该版本分支,为客户声明的错误修复程序创建第二个稳定的主干。

起初,多个分支机构看起来有些过分,但确实起到了很大作用。我可以在一个分支中开始一个构想,并在其中进行一段时间的工作,而当我开始运行圈子时,我放弃了,而开始了另一个分支以从事其他工作。后来有了一个主意,我将回到半熟的分支并探讨这个主意。总体而言,这使我的工作效率更高,因为我可以很快地表现出想法和闪光点,并观察它是否有效。用GIT切换分支的成本非常低,这使我非常灵活地使用代码库。话虽如此,我仍然必须精通rebase概念以清理历史,但由于我一个人,我怀疑我是否真的需要这样做。推它为“好学习”。

当所有分支变得复杂时,我探索了log选项以绘制更改树,并查看哪个分支在哪里。

长话短说,git不像SVN,CVS或(brrr)TFS。分支非常便宜,并且犯错会消灭工作,实际上是非常困难的。我只有一次失去了一些工作,这是因为我的承诺太大了(请参见上面的不良习惯)。如果您经常承诺,那么一小部分git将绝对是您的最佳盟友。

对我来说,git使我对源代码控制真正真正的意义开了一个开阔的胸怀。之前的其他任何事情都只是尝试获得它,git是第一个,在我看来,是得到它的。也就是说,我没有尝试其他DVCS,很可能可以将此声明扩展到整个家庭。

最后一个建议,命令行是您的朋友。并不是说图形工具不是很好,相反,但是当我下降到命令行并亲自尝试时,我真的很讨厌git。实际上,它制作得非常好,易于使用非常全面的帮助系统进行后续操作。我最大的问题是绑定到Windows中丑陋的控制台上,直到找到替代方案为止。

现在,我将两者与Eclipse集成到Git中一起使用,以实时查看发生的事情,并执行一些操作,例如差异,浏览文件的历史记录等。以及用于分支,合并,推送,获取以及更复杂的日志树的命令行。一些基本的脚本,在源代码控制方面我从未如此高效,并且对源代码也没有太多控制。

祝您好运,希望对您有所帮助。


4

我精通多种复杂的分支模型,并在工作中使用了一些模型。但是,当我一个人在项目上工作时,我几乎可以完全执行您现在正在做的事情。如果需要,我总是可以在事后创建分支,但是我几乎从不这样做。独自工作时,我很少有无法等到当前任务完成后才能解决的错误修复程序。我的建议是熟悉一些分支模型,但是直到需要时才使事情变得复杂。


4

对于更简单的模型,您可以查看GitHub的功能。“ GitHub流”非常简单,这里有一个很好的指南:https : //guides.github.com/introduction/flow/index.html

摘要(来自Scott Chacon的博客):

那么,什么是GitHub Flow?

  • master分支中的任何内容都是可部署的
  • 要处理新的东西,请创建一个描述性地命名为master的分支(即:new-oauth2-scopes)
  • 本地提交到该分支,并定期将您的工作推送到服务器上的同一命名分支
  • 当您需要反馈或帮助时,或者您认为分支可以合并时,请打开拉取请求
  • 在其他人查看并批准了该功能后,您可以将其合并到主功能中
  • 合并并推送到“主服务器”后,您可以并且应该立即部署
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.