与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/