.gitディレクトリ、および強力なGitのを理解して!

オリジナルます。https://www.daolf.com/posts/git-series-part-1/
著者:ピエール・ド・ウルフの
翻訳:明らか月、編集者:郭ルイ
出典:CSDN(ID:CSDNnews)

Gitは強力なツールですが、それらを使用することは非常に友好的ではありません。プログラマが本当にGitリポジトリの構成を理解するための時間を取ることができれば、それは不必要な多くの問題を避けることができます。

以下は翻訳です。

Gitは初心者のようである地元の人々の言語を理解していない奇妙な国に来た - あなたはどこ、どこへ行く知っていれば、その後、罰金。あなたは、その大きなトラブルを迷子にしたら。

そこに多くのオンライン学習の基本的なコマンドGitの記事がありますが、この記事では、このカテゴリの記事にも該当しません。ここで私は、さまざまな学習のアイデアを提供しようとします。

初心者は、一般的にGitのを恐れている、それは恐れて難しいことではありません。間違いありません、Gitは強力なツールですが、それらを使用することは非常に友好的ではありません。使用Gitは、新しい概念の多くを理解するためのパラメータとして、両方のコマンドパラメータではなく非常に異なる意味として提出します。

私はこれらの困難を克服するために、Gitリポジトリの使用コミットしてプッシュを学ぶだけでなく、と信じています。私たちは本当にGitリポジトリの構成を理解するための時間を取ることができる場合、それは不必要なトラブルの多くを避けることができます。

まず、研究の.gitディレクトリ

さて、私たちは今始めます。

あなたが通過するときに  git init 、あなたがgitリポジトリを作成するときに、gitが.gitディレクトリが作成されます。このディレクトリは、通常の操作は、gitのできるために必要なすべての情報が含まれています。あなたが唯一の削除.gitディレクトリのプロジェクトファイルを保持するために、直接、プロジェクトでのgitを使い続けるしたくない場合はぶっきらぼうに、置きます。あなたが行うことができるようにしかし、なぜですか?

ここで初めて、あなたが.gitフォルダを提出方法は次のとおりです。

 ├── HEAD  
    ├── branches  
    ├── config  
    ├── description  
    ├── hooks  
    │ ├── pre-commit.sample  
    │ ├── pre-push.sample  
    │ └── ...  
    ├── info  
    │ └── exclude  
    ├── objects  
    │ ├── info  
    │ └── pack  
    └── refs  
     ├── heads  
     └── tags
  • 後に再訪。

  • 設定(コンフィギュレーション)

    このファイルには、リモートのURL、メールボックスとユーザー名として、ウェアハウス・コンフィギュレーションが含まれています。コンソールを使用するたびに  git config... 、この上の影響を与えることになります。

  • 説明(説明)

    gitwebのために使用する(前身をgithubの)倉庫の説明を表示します。

  • フック(フック)

    これは面白い機能です。Gitは意味のあるGitリポジトリのすべての段階で自動的に実行できるスクリプトのセットを提供します。これらのスクリプトは、フロントと呼ばれ、後部フック(コミット)提出することができ、グループ(リベース)、プル(プル)操作の実行になります。人生のスクリプトは、その実行時間を示しています。私たちは、フックとして事前にプッシュを準備することができますように、コードをプッシュ前に確認してください。

  • 情報(情報)

    あなたは、ファイル管理Gitの.gitignoreファイルに記録することにしたいことはできません。ファイルを共有したくないファイル手段に除外します。たとえば、あなたは、IDEのカスタム設定を共有することができ.gitignoreファイルに追加する必要はありません。

第二に、含まれている何の提出?

たびにあなたが文書を作成し、それを追跡、すべてのファイルをGitは圧縮され、独自のデータ構造に格納されます。圧縮されたオブジェクトは、一意の名前とハッシュ値を有し、物体(オブジェクト)のディレクトリを格納します。

研究ディレクトリの前に、我々は一度はい提出何の意味を理解しなければなりません。あなたはそれが現在の作業ディレクトリのスナップショットをコミットすることで、言うかもしれないが、それははるかにそれよりもです。

実際には、あなたがコミットしたときに、次の2つのステップを経てGitが作業ディレクトリのスナップショットを作成します。

  • スナップショットに追加したファイルを何も変更された場合、Gitは単に圧縮ファイル(ハッシュ値)。

  • ファイルが変更された場合は、Gitは圧縮し、フォルダオブジェクトに保存されます。最終的には、名前のスナップショットには、この圧縮ファイルの(ハッシュ値)。

ここでは単純化のプロセスは、実際には、全体のプロセスは少し複雑です、詳細な説明は、今後の記事で与えられます。バックグラウンド応答のJavaテクノロジー・スタック:マイクロチャネル公共番号に焦点gitのは、私は一種の最新のGit Nチュートリアル記事が乾燥している得ることができます。

スナップショットが作成されると、それは、ハッシュ値の名前に圧縮されます。だからここでこれらの圧縮されたオブジェクトが存在しますか?彼らは、対象フォルダの存在でした。

├── 4c  
│ └── f44f1e3fe4fb7f8aa42138c324f63f5ac85828 // hash  
├── 86  
│ └── 550c31847e518e1927f95991c949fc14efc711 // hash  
├── e6  
│ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 // hash  
├── info // let's ignore that  
└── pack // let's ignore that too

これは私が空のファイル1.TXTを作成し、対象フォルダを提出した後にどのように見えるかです。「... f44f1を」「... 4cf44f1e」、gitが「4C」のサブディレクトリに保存され、それに名前を付け、ファイルのハッシュ値の場合がありますのでご注意ください。このトリックは、  /objects ディレクトリの数は255以下に低減されます。

あなたは、提出は四つの部分が含まれていることを覚えています:

  1. 作業ディレクトリ名のスナップショット(ハッシュ値)。

  2. レビュー/コメント。

  3. 投稿者の情報。

  4. 親が提出したハッシュ値。

私たちが提出された書類を抽出する場合:

// 通过查看提交历史,你可以轻松地查询到提交的哈希值  
// 你都不需要复制完整的哈希值字符串,  
// 复制能够保证哈希值的唯一性的前面一段即可。  
git cat-file -p 4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828  

以下のようになります。

tree 86550c31847e518e1927f95991c949fc14efc711  
author Pierre De Wulf <test\[@gmail.com\](mailto:[email protected])> 1455775173 -0500  
committer Pierre De Wulf <\[[email protected]\](mailto:[email protected])> 1455775173 -0500  
  
commit A  

予想通り、私たちは、ハッシュ値、コメントや著者によって提出された情報のスナップショットを見ました。

2つの非常に重要なことがあります。

  • 予想通り、ハッシュのスナップショットは、「86550 ...」も対象である、あなたはターゲットフォルダにそれを見つけることができます。

  • これは最初の投稿ですので、その親のないハッシュ値がコミットしないがあります。

シェーンは、だから、スナップショットに存在しているのですか?

git cat-file -p 86550c31847e518e1927f95991c949fc14efc711  
  
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file_1.txt

我々は以前に格納された最後のオブジェクト、そして私たちの目標の唯一のスナップショットを見つけます。これは、BLOBオブジェクト、ここでは論じない知識の別の点は、です。

バックグラウンド応答のJavaテクノロジー・スタック:マイクロチャネル公共番号に焦点gitのは、私は一種の最新のGit Nチュートリアル記事が乾燥している得ることができます。

第三に、ブランチ、タグ、HEADは同じです

あなたは今のgitのすべての内容が正しいハッシュ値によって得ることができることを学びました。私たちは今、HEADに焦点を当ててみましょう。だから、HEADは何ですか?

cat HEAD  
ref: refs/heads/master  

HEADは、HEADはあなたがポインタを使用している枝の上を指していると解釈することができ、ハッシュではありません。私たちは次の見た目、参考文献/ヘッド/マスター:

cat refs/heads/master  
4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828

これは、おなじみのそれに見えますか?これは、我々は、ハッシュ値が同じで提出初めてです。これは、そのポインタブランチ(支店)とラベル(タグ)を提出するだけのポインタであることを示しています。あなたはブランチを削除し、ラベルを削除したい場合でも、この手段は、彼らはまだ、まだそこに提出することを指しますが、難しい削除した後、これらの提出がより困難に取得します。あなたが詳細をお知りになりたい場合は、gitの本を読んで学ぶことができます。

最後に書かれた第四に、

だからここに学び、あなたはそれがあなたの現在の作業ディレクトリのファイル「圧縮」を提出し、その後、ターゲットフォルダに他の情報と一緒に保存することがあるというのgitを理解する必要があります。あなたはgitのに馴染み十分にある場合は、ファイルが送信されることはありません提出、に含まれるどのファイルを知っていますよ。

私はここで言っ提出され、作業ディレクトリのスナップショットではなく、あなたが提出したいファイルのスナップショットを意味するものではありません。実際の実装に先立ち、gitのは、あなたが提出したいファイルを格納しますか?これは、インデックスファイルに保存されます。しかし、我々は深さでそれを勉強するつもりはありません。あなたが本当に興味を持っている場合は、ここから(https://github.com/git/git/blob/master/Documentation/technical/index-format.txt)奥行学ぶことができます。

読んでくれてありがとう!私たちは、この記事を読んで、あなたは貴重なコンテンツを学ぶことができることを願っています。うまくいけば、この記事では、あなたがより簡単にgitを使用することができます。

私は続きを読むには私のブログにお勧めします:

1. JavaのチュートリアルのJVM、コレクション、マルチスレッド、新シリーズ

2. Spring MVCの、ブーツ春、クラウドチュートリアルの春シリーズ

3. Mavenの、Gitは、Eclipseの、IDEAのIntelliJツールチュートリアルシリーズ

4. Javaの、バックエンドアーキテクチャは、アリババと他のメーカーは、新たな疑問に直面します

人生は美しいです、〜明日見ます

おすすめ

転載: www.cnblogs.com/javastack/p/12521911.html