2016-08-26 4 views
2

ちょうどgitについて学ぶことを始め、私はそれのコンセプトが大好きです。私が検索で見つけられないように私にはちょっと変わったところが1つあります。私が入力したいブランチに変更する場合は、git checkout branchNameと入力してください。Finderウィンドウを見ると、ブランチの表示/非表示を視覚的に見ることができます。Git - ブランチを変更するとファイルはどこに行くのですか?

以下の2つの画像私がどのブランチにいるかを紹介し、別のブランチに行く(これはLynda.comコースをやっている)。左側にFinderとフォルダ_fontsが他のブランチに存在しなかったため消える様子が示されています。

しかし、正確にどこのファイル(および変更された他のファイル)はありますか?私がここから見たところでは、一度に異なるブランチのファイルを物理的に見ることはできませんが、私がブランチを変更するとシステムに実際に入る場所が不思議です。

Inside one branch with a _fonts folder

Inside a different branch that does not have the _fonts folder

答えて

5

ここからわかるように、物理的には別のブランチのファイルを一度に表示することはできませんが、ブランチを変更したときに実際にシステムに入る場所が不思議です。

はい、あなたは、単にこれを実行する必要があり、それ

行うことができます。

Gitは名前git workdirの下に戻って2007年にこの機能を公開しました。これはgit contribフォルダの下に長年置かれていました。

gitバージョン2.5では、git worktreeとして公開されました。複数のブランチで同時に作業することができます。

どうすればよいですか?

# create a new working directory 
# the path will be added and the given branch name will be checkout out 
git worktree add <path to the new working directory/ branch name> 

# now you have 2 folders with different branches in each one of them. 
# if you used something like `git worktree /tmp/aaa` than you will have 
# branch aaa checked out in the new folder and you can switch to any branch 
# you wish 

worktreeは、独自の3-状態を持っているので、することはできません複数worktrees上の同じブランチ。例えば

:あなたが同時に別のブランチで作業することができ、コンピュータ上の別のフォルダを作成します

git worktree add <second path> 

git worktreeは、同じリポジトリを指している間に2つの別々の作業フォルダを作成します。

これにより、リポジトリ自体に影響を与えることなく、新しいワークツリーの任意の実験を行うことができます。添付された画像には2つの別々の作業フォルダがありますが、どちらも1つのレポを使用してコンテンツを共有しています。ここで

は新しいworktreeを作成する方法についてのサンプルであり、それの結果です:私は質問が*「ファイルが行く行う場所」*でしたが、あなただけのフォルダを述べたと思います

enter image description here

2

Gitは、あなたが "working tree" を見ることができるファイルを呼び出します。この作業ツリーと並んで、Gitは.git/という名前のフォルダを作成します。このフォルダには、ほぼすべてのリポジトリの設定とデータが保存されています。好奇心が強い場合は、openコマンドを使用してOS X上のFinderでこのフォルダを開いたり、端末で閲覧することができます(隠しファイルを表示するには-alsコマンドに渡します)。すぐにgitの内部の動作のいくつかが明らかになるので、私はあなた自身でそれをチェックすることをきっと奨励します。

このフォルダ内には、objects/というフォルダがあります.Gitは、ファイル、ファイルへの変更、コミット、およびリレーションシップを格納します。 git cat-fileで内容を調べることができます。これらのオブジェクトの詳細については、本の章を参照してください。 https://git-scm.com/book/en/v2/Git-Internals-Git-Objects

gitコマンドは、作業中のツリーの状態を簡単に評価して管理できるように、これらのオブジェクトとこのフォルダの他の内容を処理する素晴らしいフロントエンドを提供します。

私はあなたがまだ興味があり、もっと学びたいと思っているならば、私が全体にリンクしてきた本全体を読むことを強くお勧めします。 "Git Internals"というタイトルの最後のセクションでは、Gitの内部動作を詳しく説明しています。

+1

は、かなり単純化されたハッシュされたスナップショットを含んでいます。はるかに良い答えを出すだろう、その移行の場面の裏に起こるもっと多くの魔法があります。 –

+0

ええ、そうです。それは不気味な答えでした。 '.git /'で他に何が起こっているのか、そしてオブジェクトをより深く見ていく方法を説明するためにもっと努力しました。あなたは他にどのような改善ができると思いますか? – pnovotnak

+0

@pnovotnak 'Git Internals'を読むことは、ここでの多くの質問に対する最良の答えです。 – ElpieKay

関連する問題