使用Git与Intellij Idea的最佳实践

时间:2010-10-06 15:00:20

标签: git intellij-idea

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

上下文

我们最近升级到Intellij构思版本9,并开始使用Git作为现有项目的新功能。

我们主要使用git命令行来更好地学习该工具。但是我们认为我们会选择蜂巢头脑来找出有关git的最佳实践。

Idea UI与CVS和Git类似,但底层实现略有不同。

示例问题

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

- 使用Autostash是个好主意吗?

- 您是否自动将每个修改添加到您的git提交中?或者稍后使用“git add”?

- 你有什么变化吗?

- 合并的最佳方式?

- 任何其他提示/提示/为你工作的等等。

最终评论

我们仍然“在cvs中思考”,因此部分内容已经习惯了git;部分已经习惯了Idea的Ui for git。

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

由于

2 个答案:

答案 0 :(得分:15)

这是我们在Git / Idea几周后发现的。我把它变成了一个社区维基。请投入你的2克朗/厘米/ pfennings /美分。

注意:我正在回答我自己的问题,因为我找到了那些易于使用的要点。

<强>预设

理念是很棒的工具。这里没有人抱怨。只是观察。

最佳做法

  • 此时(9.0.3)使用Idea的Git比使用Idea的SVN更难使用。部分源于Git(vs SVN)的复杂性,部分原因是Idea的工具并不能完成git世界中的所有工作。

  • 因此您需要使用命令行

  • Idea的合并工具比命令行合并或甚至使用mergetool(使用meld或mergetool)更好地。原因是:你有更多的自由离开在“思想环境”中工作,而不是一次修复一个棉绒。

  • 从命令行更新工作树时,请记住在Idea(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
  • Bob工作,提交文件C,提交文件D,提交文件E
  • Alice推动她的改变
  • 鲍勃拉出他的改变

来自CVS / SVN,我期待Ideas弹出方便的差异工具。没有。相反git / idea会引发一个红旗,我通常最终使用“git mergetool”(在Linux上使用meld od,在windows上使用tortoiesmerge)。

注意:也许Idea提供了更好的方法。请让我直截了当。 请注意动机:你能设置.gitconfig来使用Idea的差异化工具吗?

<强>积攒

  • 创意“搁置”功能重复“Git Stash”。两者看似相似。两者都使用补丁。您可能想要使用其中一个。我还没有想出一个或另一个的优势

Big Old Projects

  • 如果您正在处理最近迁移到Git的十年旧项目,请将jar文件签入scm(即之前已检入CVS / SVN,其中log4j-1.0.jar位于BRANCH-2-0和主线中有log4j-9.0.jar),小心谨慎如果你想要查看项目的“2.0版”。 Idea需要卸载所有“头”罐子并重新加载罐子里检查过的2.0。这需要永远。

其他小东西

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

  • 你不能在Git和CVS / SVN中拥有相同的工作树(虽然UI似乎暗示如此)。我/我们在最初的“让我们试试git并仍然使用CVS作为备份计划”阶段尝试了这一点。它不起作用

答案 1 :(得分:4)

首先,您可以在免费在线参考书中获得有关git的许多信息:

注意:Git“良好实践”和工作流程与您使用的IDE完全无关。幸运的是,IDEA是一个很棒的IDE,大多数Git有用的功能都很好实现(rebase,stash等)。

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

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

对于提交,如果您经常或不提交,请立即或稍后将每个文件添加到索引中并不重要。这是您当地的工作,您可以根据自己的喜好进行组织。

重要的是,当您推送您的工作时(在将其公开给其他开发人员时)进行干净提交。

当您即将推送时,您可以更正自上次推送以来的所有历史记录(例如,使用rebase)。

例如(如果您忘记修改之前的提交):   - 提交“超级功能”   - 提交“oups:忘了文件”   - 提交“bug纠正”

在推送这些提交之前,您可以使用带有IDEA的交互式rebase 来融合这些提交。因此,最后两次提交将包含在第一次提交中。

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

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