私はプッシュするための裸のリポジトリを持っているサーバーを持っています。しかし、私のサーバにはmasterブランチの作業コピーが必要です。裸のリポジトリの作業コピーを取得する
作業コピーを取得するにはどうすればよいのですか?
私はプッシュするための裸のリポジトリを持っているサーバーを持っています。しかし、私のサーバにはmasterブランチの作業コピーが必要です。裸のリポジトリの作業コピーを取得する
作業コピーを取得するにはどうすればよいのですか?
あなたは、単に同じマシン上の別のディレクトリにリポジトリのクローンを作成することができます
git clone /bare/repo/dir.git
、現在のディレクトリは、あなたのレポの非裸のクローンになるだろう、とあなたはmaster
ブランチのチェックアウトを取得します自動的に。その後、必要に応じてgit pull
のような通常のコマンドを使用して更新します。
この操作は非常に効率的です。ローカルディレクトリをgit clone
に指定すると、gitはハードリンクを使用して2つのrepos間でオブジェクトを共有しようとします。
これには '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
(hereを見られるように)私は、 "デタッチ作業ツリー" アプローチを探していた:これは2他のオフリフです
git init --bare
git config core.worktree /somewhere/else/
git config core.bare false
git checkout -f
ブログ記事のコメントに書かれているように、 'core.worktree'行の前に' core.bare'を実行する必要があることに注意してください。さもなければエラー 'fatal:core.bareとcore.worktreeは意味を成さない'を得るでしょう。 – craigpatik
奇妙なので、私はやった:https://gist.github.com/joallard/8871673。おそらくGitの動作はある時点で変更されましたか? –
これは、私が必要とするものに近い*のように見えますが、あなたのリンクが壊れていて、上記のコマンドは、私のニーズに合わせて十分に説明できません。リンクを修正したり、そこに起こっていることを説明したりできますか? – Wildcard
私のユースケースのギャップを埋める - 元のリポジトリを更新し、ブランチと任意の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のレポを持っているので。
あなたはsome_branchについて言及した唯一の人です。私は具体的に枝の例を見つけようとしていましたが、これは枝のためにGoogle上で暑かったし、OQの一部です。 ... – blamb
これは、それがどのように動作するかです:
$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir
$ cd /path/to/workdir
$ git checkout .
ほら!
info:git init
はReinitialized existing Git repository in /path/to/existing-bare-repository
と報告します。しかし、自信を持ってください。 man git-init
さんのコメント: 既存のリポジトリにgit initを実行することは安全です。すでに存在しているものを上書きしません。
魔法は、git init
だけでも、作業ディレクトリにファイルが表示されないということです。ルートディレクトリをチェックアウトする必要があります。
裸のリポジトリは、作業ディレクトリの.gitディレクトリと、ローカル設定ファイルのエントリです。私は完全な1に裸のリポジトリを変換にやったことです:
.git
を作成して、裸のリポジトリからすべてのファイルを移動しそこでbare = false
bare = true
を変更する
.git/config
ファイル
.git
ディレクトリに隠し属性を設定することができが、ディレクトリ内のファイルにない。
この操作は更新で機能しますか? –
どのようなアップデートですか?複製されたリポジトリは単なるクローンなので、 'git pull'を使ってその作業ツリーを更新する必要があります。これを自動的に行う必要がある場合は、サーバの 'post-receive'フックを配置して、クローンに対して' git pull'を実行することができます。 – user4815162342
ああ、明らかに。私は「クローン」という言葉をあまりにも多く考えていました。 –