web-dev-qa-db-ja.com

Intellij IdeaでGitを使用するためのベストプラクティス

簡単に言うと、Intellij Idea(9)とGitを使用するためのベストプラクティスは何ですか?

コンテキスト

最近Intellij ideaバージョン9にアップグレードし、既存のプロジェクトの新機能にGitの使用を開始しました。

ツールをよりよく学習するために、主にgitコマンドラインを使用します。しかし、私たちはHive-mindを選んで、git with ideaのベストプラクティスを見つけようと考えました。

Idea UIはCVSとGitの両方で似ていますが、基礎となる実装は少し異なります。

質問例

例:-CVSでは、製品のリリースが複数あった場合、各自が1-0、2-0、3-0などのブランチのローカルコピーを持ち、それぞれが独自のIntellijファイル(つまり、 .ipr、.iwsなど)。 「git way」には1つのプロジェクトがあり、「git branch」を使用してブランチを切り替えているようです。これは問題ありませんが、ブランチを変更するときに、(チェックインされたjarを含む変更された各ファイルをリロードする必要があるため)アイデアに大きなオーバーヘッドが発生します。だから、あなたはまだ「メジャーリリース」ごとに別個のプロジェクト(.git)を持っていますか、それとも1つのプロジェクトを持って「gitブランチ」を使用していますか?

-Autostashを使用することをお勧めしますか?

-git commitに各変更を自動的に追加しますか?または後で「git add」を使用しますか?

-リベースしますか?

-マージする最良の方法は?

-その他のヒント/ヒント/ what-works-for-youなど.

最終コメント

まだ「cvsで考える」ので、これの一部はgitに慣れています。一部は、GitのIdeaのUiに慣れています。

これらは主にコマンドラインを使用しているため、かなり初歩的な質問です。また、私は10がより良い/より強い/より速いgit統合ツールのアイデアを聞いた

ありがとう

40
user331465

数週間のGit/Ideaの後に見つかったものを以下に示します。これをコミュニティWikiにしました。 2クローネ/ centimos/pfennings/centsを投入してください。

注:これらの使いやすい箇条書きを探したので、私は自分の質問に答えています。

前提条件

アイデアは素晴らしいツールです。ここの誰も不満を言っていません。ただ観察しています。

ベストプラクティス

  • この時点(9.0.3)では、Git with IdeaはIdeaを使用したSVNよりも使用するのが単純に困難です。一部はGitの複雑さ(vs SVN)に由来します。これは、Ideaのツールがgitの世界ですべてを行うわけではないからです。

  • したがって、コマンドラインを使用する必要があります

  • Ideaのマージツールは、コマンドラインマージやmergetool(meldまたはmergetoolを使用)を使用するよりもmuchより優れています。理由:一度に1つのリントを修正するのではなく、「アイデア環境」で作業するはるかに多くの自由があります。

  • コマンドラインから作業ツリーを更新するときは、Idea(ctrl-alt-y)で同期することを忘れないでください

  • Gitコンソールを見て、アイデアのgitトリックを学びます。 ideaはそこで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
  • 残念ながら、Ideaには9.0.3で「アップストリームコミットの競合をマージする」ための優れたツールがありません。

例:

  • アリスは動作し、ファイルAを(ローカルに)コミットし、ファイルBをコミットし、ファイルCをコミットします
  • ボブは作業を行い、ファイルCをコミットし、ファイルDをコミットし、ファイルEをコミットします
  • アリスは彼女の変更をプッシュします
  • ボブは彼の変更を引っ張る

CVS/SVNから来て、Ideasの便利な差分ツールがポップアップすることを期待していました。いいえ。代わりにgit/ideaが赤い旗を投げ、私は通常「git mergetool」を使用することになります(meld od、Windowsではtortoiesmerge)。

注:おそらくIdeaはより良い方法を提供します。まっすぐにしてください。やる気に注意してください:.gitconfigをセットアップして、Ideaの差分ツールを使用できますか?

スタッシング

  • アイデアの「シェルフ」機能は「Git Stash」と重複しています。どちらも似ているようです。どちらもパッチを使用します。おそらくどちらかを使用したいでしょう。私はどちらか一方の利点を理解していません

Big Old Projects

  • 最近Gitに移行した10年前のプロジェクトで作業している場合、jarファイルをscmにチェックインします(つまり、以前にCVS/SVNにチェックインしました。log4j-1.0.jarはBRANCH-2-0にあり、メインラインにはlog4j- 9.0.jar)、プロジェクトの「バージョン2.0」をチェックアウトする場合は注意して進めてください。アイデアは、すべての「ヘッド」jarをアンロードし、jars-checked-in-at-2.0をリロードする必要があります。これは永遠にかかります。

その他の小さなもの

  • Gitを既に初期化した場合でも、アイデアメニュー/ UIには「git init ...」が表示されます。紛らわしいですが、無視してください。

  • GitとCVS/SVNの両方で同じ作業ツリーを使用することはできません(UIはそのように見えるかもしれませんが)。私は、最初の「gitを試して、CVSをバックアップ計画として使用します」フェーズでこれを試しました。うまくいきませんでした

15
user331465

まず、無料のオンラインリファレンスブックでgitに関する多くの情報を確認できます。

注:Gitの「グッドプラクティス」とワークフローは、使用するIDEから完全に独立しています。幸いなことに、IDEAは優れたIDEであり、ほとんどのGitの便利な機能が適切に実装されています(リベース、スタッシュなど)

Git-flowの質問については、集中型VCSのように考えています。

GitはDistributedバージョン管理システムです。そのため、「最初にローカルを考える」必要があります。

コミットの場合、頻繁にコミットするかどうかに関係なく、各ファイルをすぐにインデックスに追加しても、後でインデックスを追加しても、実際には問題になりません。それはあなたの地元の仕事であり、好きなように整理することができます。

重要なのは、作業をPushしようとしているときにクリーンコミットすることです(他の開発者に公開します)。

プッシュしようとしているときは、最後のプッシュ以降のすべての履歴を修正できます(たとえば、リベースを使用)。

例えば(amend以前のコミットを忘れた場合):-コミット "スーパー関数"-コミット "oups:ファイルを忘れた"-コミット "バグ補正"

これらの3つのコミットをプッシュする前に、IDEAでinteractive rebaseを使用して、これらのコミットを融合できます。したがって、最後の2つのコミットは最初のコミットに含まれます。

注:プッシュしていない間に履歴を変更できます。それでもできるが、それは非常に悪い考えです(そして、Gitを強制しない場合、次のプッシュは拒否されます)。同僚の履歴を破壊する可能性があるためです(作業を取得/マージした場合)。

一般的なGitの作業フローについて、この良い記事をお勧めします。 http://nvie.com/posts/a-successful-git-branching-model/

4
Benoit Courtine