web-dev-qa-db-ja.com

ベアリポジトリの作業コピーを取得する

プッシュ用のベアリポジトリがあるサーバーがあります。ただし、サーバーにはmasterブランチの作業コピーが必要です。

裸のリポジトリからのみ作業コピーを取得するにはどうすればよいですか?

29
Jonathan Allard

リポジトリを同じマシン上の別のディレクトリに複製するだけです:

git clone /bare/repo/dir.git

現在のディレクトリはリポジトリの非ベアクローンになり、masterブランチのチェックアウトが自動的に取得されます。次に、git pullなどの通常のコマンドを使用して、必要に応じて更新します。

副次的な利点として、この操作は非常に効率的です。ローカルディレクトリをgit cloneに指定すると、gitはハードリンクを使用してこれら2つのリポジトリ間でオブジェクトを共有しようとします。

29
user4815162342

ベアリポジトリは、作業ディレクトリの.gitディレクトリであり、ローカル構成ファイルのエントリです。 裸のリポジトリを完全なリポジトリに変換する

  • 新しいサブディレクトリ.gitを作成し、そこにある裸のリポジトリからすべてのファイルを移動します
  • .git/configファイルを編集して、bare = truebare = falseに変更します
  • 必要なブランチをチェックアウトします。これにより、リポジトリからすべてのファイルが作業ディレクトリに抽出されます。

Windowsでは.gitディレクトリにHidden属性を設定できますが、ディレクトリ内のファイルにはnotを設定できます。

16
ygoe

私は「分離された作業ツリー」アプローチを探していました(見られるように ここ ):

git init --bare

git config core.bare false
git config core.worktree /somewhere/else/

git checkout -f
14
Jonathan Allard

これは他の2つの答えのリフですが、私のユースケースのギャップを埋めます-通常の完全なgitリポジトリで終わるため、Originからリポジトリを更新し、ブランチとgit操作をチェックアウトするために機能します.

git clone /path/to/bare/repo /new/path/to/full/repo
cd /new/path/to/full/repo
git remote set-url Origin [email protected]:Swift/swift.git

これらの3行のコードを実行した後、git pullおよびgit branchおよびgit checkout some_branchなど。リモートリポジトリに接続された通常の完全なgitリポジトリがあるためです。

4
GregT

これがどのように機能するかです:

$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir
$ cd /path/to/workdir
$ git checkout .

ほら!

情報:git initは報告します:Reinitialized existing Git repository in /path/to/existing-bare-repository。しかし、自信を持ってください。 man git-init言います:既存のリポジトリでgit initを実行しても安全です。既に存在するものを上書きしません。

魔法はgit init単独では、作業ディレクトリにファイルが表示されません。ルートディレクトリをチェックアウトする必要があります。

1
Adrian W

これには「git show」を使用できます。

http://www.kernel.org/pub/software/scm/git/docs/git-show.html

基本的に:

git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file.txt
1
Ben Martin