この回答は、最速のgit
方法を学ぶ方法ではなく、上級プログラマーに興味を持たせる方法に対処しようとしていますgit
-そのためには、優れたgitブックは素晴らしい、または多くのチュートリアル(=> Google)です。この回答に適したリンクは、Gitが純粋に機能的なデータ構造であるか、特にgitがデータを保存する方法が短いことです。
私はこれについてかなり暗い見方をしているのではないかと心配しています。私はまさにあなたの靴を履いています-私はgit
オタクで、チームを変革したいと思っていましたsvn
。私の場合、それは私自身の認識を積極的に変え、人々を「幸福を強いる」ことはできないということを積極的に変えさせてくれました。人々はコンピューターではありません。プログラムするのは非常に難しいです。試してみたことにまだ満足しています。それは、私がやっていることと私がやりたくないことをやさしい方法で示しています。
新しいものが巻き込まれたときにやる気が出始める人もいれば、やる気のない人もいます。これはとは何の関係もありませんgit
が、git
具体的svn
には、「うまくいけば、なぜそれを使用すべきなのか」という効果が常にあります。これは大きな心理的障壁です。
また、実際にグロッキングをgit
行うには、抽象データ構造に強い関心が必要です。信じられないように聞こえるかもしれませんが、私の経験では、まったく関心がなく、単純な配列よりも複雑な要素に飽き飽きしているプログラマーがいます。あなたは彼らが彼らがしている仕事をしているべきかどうかを議論することができますが、それはそうです。
人々がそれに興味がなければ、彼らはそれを理解しません。簡潔でシンプル。学校の成績が悪いのは、無関心が知能を欠いていないことの主な理由だと思います。
とはいえ、ここでは、下から上への知識の蓄積に基づいて、私が適用するカリキュラムを作成します。私には役に立たなかったが、あなたはそれをインスピレーションとして自分自身を転がすと考えるかもしれない。
GUI
次のアプローチでは、必ずしもアクションのGUIサポート(git add
hello worldリポジトリ内)が必要ではありませんが、リポジトリを視覚化するためのGUIを最初から用意しておくと非常に役立ちます。どちらを使用するか決められない場合はgitk
、最後の手段としてください。皆さんが何らかのビジュアルエディターを使用している場合は、git
GUIコンポーネントを見つけてください。
(静的)データ構造が重要
まず、内部データ型(3つと1つだけです:ブロブ、ツリー、コミット、注釈付きタグ、この段階では最後はまったく関係ありません)とその構造について説明します。ホワイトボード/鉛筆で簡単にできます。ツリーは変更することはできないため、簡単に描画できます。文字通り、いつでも追加することができます。新しく作成したローカルリポジトリでプレイセッションを実行git cat-file
し、実際のオブジェクトを調べて、実際に宣伝されているように些細なものであることを示すことができます。
彼らがそれを理解するのを助けることができれば
- ...歴史には文字通り3種類のオブジェクトしかありませんが、それらはすべて非常にシンプルで、ほとんど些細なものであり、
- ...ほとんどの
git
サブコマンドは、これらのオブジェクトを何らかの方法で「マッサージ」し、ほとんど取るに足らない操作(基本的には、1つだけ:新しいコミットをどこかに追加する)であり、
- ...すべてが容易にすることができます見て右とあなたの目の前に
ls
してgit cat-file
...
その後、リポジトリに実際にあるものの精神的な翻訳があります。この時点で、senioursが可能の内部がいることを覚えておいてくださいsvn
(または「再統合」の枝や、と?これまでSVNリポジトリ内のロックに問題がありました)難解な魔法があり、これがあり、彼らに少しのやる気を引き出すだけ。
一つの問題は、特異的に使用人とsvn
、常に1が(オブジェクトではなく、行動を)犯すという考えに慣れることですされ、全体のディレクトリツリー。ではsvn
、個々のファイルをコミットするために人々が使用されます。これは根本的に異なるアプローチです。ああ、「コミット」という同じ用語が静的オブジェクトとアクションの両方に使用されているという事実も役に立たない。
他の問題は、ツリーではなく線形履歴svn
をsvn
使用することです。これもまた、大きく異なります。だから、今こそこれらの違いを多く指摘する時です。
構造の観点から説明されたアクション
git
リポジトリがどの部分から作られているかを理解したら、個々のサブコマンドがそれらの観点から何をするかを正確に示しますgit
。
私は話していますadd
、commit
ローカルの作業ディレクトリとステージ(彼らは作業ディレクトリがリポジトリと同じではありませんステージング領域と同じではないことを理解しておいてください)と一緒に、。
これらのコマンドが単純にツリーを成長させることを理解したら(この段階でも、ブロブ、ツリー、コミット、コミットだけでなく3つのタイプで構成されます)、最初git push
にgit pull
(早送りモードで! )git
文字通りオブジェクトをプッシュするだけであり、ハッシュは実際にはコンテンツハッシュのみであり、ファイルシステムコピーコマンドなどで簡単にコピーできることを示します。
明らかに、これらのコマンドの重要ではないオプションから遠ざけてgit add hello.txt
ください。
枝
分岐はsvn
完全に異なるため、人々にとって特に難しいことに注意してください。svn
モデルは非常に基本的に可視化することは何もないとして、視覚化しやすい-それは平面図です。git
モデルはあまりありません。ブランチとタグが単にどこかを指している「付箋」であり、静的で不変の履歴に関しては「存在しない」ことを最初から認識していることを確認してください。
次に、簡単な例の後に例を実行して、実際に何ができるかを示します。あなた自身が慣れているように見えるのでgit
、そこに動機を見つけるのに問題はないはずです。ツリーがどのように成長するかという観点から、常にこれを見るようにしてください。
それらがダウンしている場合git pull
は、実際にどのように説明することができますgit fetch && git merge
。すべてのリポジトリが実際にまったく同じオブジェクトをどのように含んでいるか(gitオブジェクトディレクトリ内でのgit fetch
コピーとほぼ同じですscp
)など。
おそらく、この時間までに彼らの興味を起こさせるために到達していないなら、あなたはちょうどあきらめることができますが、彼らがこれまでのところうまくいくなら、彼らは自由にすべての精神的なツールを持っているので、ほとんどありません恐れはもう関係します。残り(gitワークフロー...)は、それから下り坂になるはずです。
最後の言葉
これは多くの努力のように聞こえますが、本当にそうです。これを「このプロジェクトに必要だ」と売るのではなく、「個人的に開発するのに役立ち、今後のやり取りのすべてに役立ちます」。これには多くの時間が必要であり、時は金なりです。これについて経営陣が受け入れていない場合、それだけの価値がないかもしれません。おそらく上司と話し合う必要があります。
一見理解できない開発者に教えることを断念したいgit
が、今後絶対に使用しなければならない場合は、すべての相互作用をgit
クックアップされたスクリプトまたはすべてのgit
詳細を取り除いたGUIに置き換えることを検討してください。スクリプトにすべてのエラー制御などを注ぎ、それが機能するようにします。