简而言之:使用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集成工具
由于
答案 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
示例:
来自CVS / SVN,我期待Ideas弹出方便的差异工具。没有。相反git / idea会引发一个红旗,我通常最终使用“git mergetool”(在Linux上使用meld od,在windows上使用tortoiesmerge)。
注意:也许Idea提供了更好的方法。请让我直截了当。 请注意动机:你能设置.gitconfig来使用Idea的差异化工具吗?
<强>积攒强>
Big Old Projects
其他小东西
即使你已经初始化了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/