これはgitでタグ付けされているので、SVNの知識の欠如が無視できないことを願っています。
現在、私はリポジトリをクローンし、gitkを使用して特定のブランチをクローンしています。
特定のブランチだけでなく、リモートリポジトリ全体のクローンを作成しています。
リポジトリはデータベースとして最もよく想像されるので、リモートデータベースの現在の状態のクローンを作成しています。しかし、その後は、そのデータベースの独自のコピーに取り組んでいます。コミットすると、ローカルデータベースが変更されます。
このfetch
コマンドは、ローカルデータベースをリモートデータベースと同期させるために使用されます。
通常、そのローカルデータベースから、作業するブランチをチェックアウトします。これは、現在の作業が始まったgitの内部マーカーのようなものです。
たとえば、に加えてブランチが存在しない単純なリポジトリに取り組んでいるmaster
としましょう。.git
「魔法」を明らかにするためにフォルダを覗いてみてください。
最後のコミット(master
)があったと仮定する182e8220b404437b9e43eb78149d31af79040c66
と、まさにそれを見つけるでしょうcat .git/refs/heads/master
。
新しいブランチgit checkout -b mybranch
から分岐すると、ファイル内でまったく同じポインターが見つかりますcat .git/refs/heads/mybranch
。
ブランチは「ポインタ」にすぎません。「作業」マーカーはと呼ばれますHEAD
。
あなたHEAD
がどこにいるか知りたい場合:
cat .git/HEAD
これは、たとえばref: refs/heads/mybranch
、cat .git/refs/heads/mybranch
コミットハッシュを指す()78a8a6eb6f82eae21b156b68d553dd143c6d3e6f
実際のコミットは、objects
フォルダの下に保存されます(独自のトピックはどのようになりますか)。
プロジェクトフォルダーにはそのブランチのコンテンツのみが含まれており、SVNのようにすべてのブランチを表示することはできません。
working directory
全体を「git-database」と混同しないでください。上で述べたように、作業ディレクトリは(たぶん)サブセットのスナップショットにすぎません。
別のブランチがある場合、作業ディレクトリはそのブランチでの作業専用になります(ただし、そこから作業を他の場所に配置できます)。
通常、プロジェクトに定義されているブランチを確認したい場合は、次の可能性があります。
git branch
地元の支店向け
git branch --remote
リモートブランチ用
git branch -a
両方のための
(またはgit branch -v
)
gitは分散バージョン管理システムであるため、ローカル/リモートで異なるブランチを作成することが可能であるだけでなく、推奨されます。
私の典型的なワークフローは次のとおりです。
- 機能を分岐させる
- WIP(作業中)ブランチからブランチ
- あなたが望むように動作します-1行後にコミットしたとしても; 関係ない
機能が完了したら:
WIP
ブランチのスカッシュ/リワーク(インタラクティブなリベースを使用)= そのブランチから単一のコミットを行う
WIP
ブランチを機能ブランチにマージし、それを提供して(githubで作業している場合、そのオファーは「プルリクエスト」と呼ばれます)、安定した(マスター)ブランチに統合します。
また、たとえば、マスターでホットフィックスを作成し、別のブランチのコンテンツも保持する必要がある場合に備えて、2つのブランチで同時にwprlする必要があるプロセスを処理する方法を知りたいです。
プロジェクトの構造に依存します。
安定したマスターがあるとしましょう。また、機能はその安定したブランチからのみ開発されるため、通常は機能ブランチの背後にあります。次に、機能ブランチのルートとなるマスターでの最後のコミットがあります。
次に、マスターブランチでコミットを行い、両方のブランチをマージするかリベースするかを決定できます(これは、高度なニーズを持つユーザーにとっては一種のマージです)。
または、ブランチ(例master
)に変更を加えて、他のブランチにチェリーピックすることもできます。
GITのレポジトリからクローンされたブランチを含むフォルダーを作成するための推奨される名前の規則は何ですか、例myproject-branchname
それはあなた次第です。
通常、最終的にリポジトリ名になります。
ただし、これが望ましくない場合もあります。
たとえば、git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
here .oh-my-zsh
がターゲットとして明示的に指定されているoh-my-zshのクローンを作成します。