与Intellij Idea一起使用Git的最佳实践

简而言之,使用Intellij Idea(9)和Git的最佳实践是什么?

上下文

我们最近升级到了idea 9,并开始使用Git来实现现有项目的新function。

我们主要使用git命令行来更好的学习这个工具。 但是我们认为我们会select蜂巢式的思路来找出git和idea的最佳实践。

Idea UI对于CVS和Git来说都是相似的,但底层实现却有所不同。

示例问题

例如: – 用CVS,当我们有多个版本的产品时,我们每个人都有1-0,2-0,3-0等分支的本地副本,每个分支都有自己的Intellij文件(即.ipr,.iws等)。 “Git方式”似乎有一个项目,并使用“GIT分支”切换分支。 这很好,但是当你改变分支的时候,它为想法创造了巨大的开销(因为它必须重新加载每个改变的文件,包括签入的jar)。 所以:你还有一个单独的项目(与.git)为每个“主要版本”或有一个项目,并使用“Git分支”?

– 使用Autostash是个好主意吗?

– 你会自动添加每个修改到你的git提交? 或者稍后使用“git add”?

你有没有发债?

最好的方式来合并?

– 任何其他提示/提示/为你工作,等等。

最终评论

我们仍然“在cvs中思考”,所以这部分已经习惯了git; 部分习惯了Idea的Ui for git。

这些是相当基本的问题,因为我们仍然主要使用命令行。 另外我听说主意10有更好/更强大/更快的git集成工具

谢谢

这是Git / Idea几个星期后我们发现的。 我已经使这个社区维基。 请投入您的2克朗/厘米/芬尼/美分。

注:我正在回答我自己的问题,因为我寻求那些易用的项目符号。

前提

想法是伟大的工具。 这里没有人抱怨。 只是观察。

最佳实践

  • 在这一点上(9.0.3)Git with Idea比SVN和Idea更难使用。 部分原因是Git(vs SVN)的复杂性,部分原因是Idea的工具并没有在git世界中做所有事情。

  • 因此您将需要使用命令行

  • Idea的合并工具比命令行合并或甚至使用mergetool(使用meld或mergetool)的效果好得多。 原因是:在“创意环境”中,你有更多的自由主义精神,而不是一次一根皮。

  • 当你从命令行更新工作树时,请记住在想法(ctrl-alt-y)中进行同步

  • 看着Git控制台学习想法的Git技巧; 想法在那里执行git命令(版本控制视图,控制台选项卡):

例:

13:30:58.234: git log -M --follow --name-only --pretty=format:%H%x00%ct%x00%an%x20%x3C%ae%x3E%x00%cn%x20%x3C%ce%x3E%x00%s%n%n%b%x00 --encoding=UTF-8 -- src/jsp/workspaces/include/edit.jsp 13:31:02.437: cd J:\projects\PE-GIT\pe 13:31:02.437: git annotate -p -l -t -M HEAD -- src/jsp/workspaces/include/edit.jsp 
  • 不幸的是,在9.0.3中,Idea并没有很好的工具来“合并上游提交中的冲突”

例:

  • Alice确实工作,提交(本地)文件A,提交文件B,提交文件C.
  • 鲍勃确实工作,提交文件C,提交文件D,提交文件E
  • 爱丽丝推动她的变化
  • 鲍勃拉他的变化

来自CVS / SVN的,我期望的思想方便的差异化工具popup。 不,相反,git / idea会抛出一个红旗,我通常会使用“git mergetool”(linux上的meld od,windows上的tortoiesmerge)。

注意:Idea可能提供更好的方法。 请把我放直。 注意动机:你可以设置.gitconfig来使用Idea的差异化工具吗?

积攒

  • 想法“搁置”function重复“Git藏匿”。 两者看起来相似。 两者都使用补丁。 你可能想要使用其中一个。 我还没有弄清楚这个或那个的优点

大旧项目

  • 如果你正在研究一个十年前的项目,最近迁移到Git,jar文件签入scm(即先前签入CVS / SVN,其中log4j-1.0.jar在BRANCH-2-0,主线有log4j- 9.0.jar),如果您想要签出项目的“2.0版本”,请继续操作。 想法需要卸载所有的“头”jar,并重新加载jar子检查在2.0。 这需要永远。

其他小东西

  • 即使你已经初始化了Git,想法菜单/ UI仍然显示“git init …”。 这是令人困惑的,但忽略它。

  • 在Git和CVS / SVN中都不能有相同的工作树(尽pipe用户界面似乎暗示了这一点)。 我/我们在最初的“让我们尝试git,仍然使用CVS作为备份计划”阶段尝试了这个。 它没有工作

首先,你可以在免费的在线参考书上获得许多关于git的信息:

注意:Git“良好实践”和工作stream程完全独立于您使用的IDE。 幸运的是,IDEA是一个伟大的IDE,大多数Git有用的函数都很好的实现了(rebase,stash等)

关于您的git-flow问题,您正在考虑使用集中式VCS。

Git是一个分布式版本控制系统。 所以,你必须“先考虑本地 ”。

对于提交,如果您将每个文件立即或稍后添加到索引,如果频繁提交,则无关紧要。 这是你当地的工作,你可以根据自己的喜好进行组织。

重要的是,当你要推动你的工作时,要有干净的提交(把它暴露给其他开发者)。

当您即将推出时,您可以更正自上次推送以来的所有历史logging(例如,使用重新分页)。

例如(如果您忘记修改以前的提交): – 提交“超级函数” – 提交“oups:忘记文件” – 提交“错误更正”

在推送这3个提交之前,可以使用与IDEA的交互式底图来融合这些提交。 所以最后2个提交将被包含在第一个。

注意:你可以修改你的历史,而你没有推。 如果你仍然可以,但这是一个非常糟糕的主意(如果你不强制Git,下一步将被拒绝),因为它可能会破坏你的同事的历史(如果他们已经取得/合并你的工作)。

关于一个常见的Git工作stream程,我build议你这篇好文章: http : //nvie.com/posts/a-successful-git-branching-model/