web-dev-qa-db-ja.com

外部からのgitcheckoutブランチ

問題:このプロジェクトの特定のフォルダーにいなくても、ファイルシステムにローカルで既に複製されているプロジェクトの既存のブランチを何らかの方法でチェックアウトする必要があります。

解決策:私は次のことをしようとしています:

  1. git clone'github-project-url''file-system-folder '
  2. git checkout'existing-branch''file-system-folder '

私は、2番目のステップが完全に正しくないことを認識していますが、「cd'file-system-folder '」を回避しようとしています。

31
eistrati

--git-dirを使用してリポジトリとして使用する.gitディレクトリを指定し、--work-treeを使用してチェックアウトする作業ツリーを指定できます。 git man page 詳細については。

git --git-dir=file-system-folder/.git --work-tree=file-system-folder checkout existing-branch
63
Brian Campbell

オプションとして-Cを使用することもできます。次のような他のコマンドの前に必ず使用してください。

git -C ~/my-git-repo checkout master

特に.gitフォルダーである必要はないことに注意してください。これが男の文書です:

-C <path>
       Run as if git was started in <path> instead of the current 
       working directory. When multiple -C options are given, each
       subsequent non-absolute -C <path> is interpreted relative to
       the preceding -C <path>.

       This option affects options that expect path name like --git-dir
       and --work-tree in that their interpretations of the path names
       would be made relative to the working directory caused by the -C option.
       For example the following invocations are equivalent:

           git --git-dir=a.git --work-tree=b -C c status
           git --git-dir=c/a.git --work-tree=c/b status
7
General Redneck
git clone ./foo ./foo-copy
git --git-dir=./foo-copy/.git --work-tree=./foo-copy checkout branch
2
Robin Green

git 2.5は、 git worktree を使用して複数の作業ツリーを持つ機能を追加しました。したがって、この場合、次のようなものを使用します

git worktree add -b new-branch-name ../dir-name existing-branch

その後、dir-nameに変更して、通常どおりコミットを行うことができます。コミットは、元のリポジトリ(worktree addを使用した場所)に保存されます。

完了し、必要なものがすべてコミットされたら、dir-nameフォルダーを削除してgit worktree Pruneを実行し、リポジトリ内の孤立したワークツリーをクリーンアップできます。

1
Wilka

--git-dir--work-treeを使用して、CDを回避することは大歓迎ですが、正直なところ、CDを作成する方が簡単です。 CDを戻す必要がないように、サブシェルで行うことができます。

git clone foo foo-copy
(cd foo-copy && git checkout branch)

もちろん、この特定のケースでは、実際には2つのコマンドは必要ありません。

git clone -b <branch-to-checkout> foo foo-copy 
1
Cascabel