2012-09-16 21 views

答えて

18

あなたは、単に同じマシン上の別のディレクトリにリポジトリのクローンを作成することができます

git clone /bare/repo/dir.git 

、現在のディレクトリは、あなたのレポの非裸のクローンになるだろう、とあなたはmasterブランチのチェックアウトを取得します自動的に。その後、必要に応じてgit pullのような通常のコマンドを使用して更新します。

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

+0

この操作は更新で機能しますか? –

+0

どのようなアップデートですか?複製されたリポジトリは単なるクローンなので、 'git pull'を使ってその作業ツリーを更新する必要があります。これを自動的に行う必要がある場合は、サーバの 'post-receive'フックを配置して、クローンに対して' git pull'を実行することができます。 – user4815162342

+0

ああ、明らかに。私は「クローン」という言葉をあまりにも多く考えていました。 –

8

hereを見られるように)私は、 "デタッチ作業ツリー" アプローチを探していた:これは2他のオフリフです

git init --bare 

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

git checkout -f 
+3

ブログ記事のコメントに書かれているように、 'core.worktree'行の前に' core.bare'を実行する必要があることに注意してください。さもなければエラー 'fatal:core.bareとcore.worktreeは意味を成さない'を得るでしょう。 – craigpatik

+0

奇妙なので、私はやった:https://gist.github.com/joallard/8871673。おそらくGitの動作はある時点で変更されましたか? –

+0

これは、私が必要とするものに近い*のように見えますが、あなたのリンクが壊れていて、上記のコマンドは、私のニーズに合わせて十分に説明できません。リンクを修正したり、そこに起こっていることを説明したりできますか? – Wildcard

3

私のユースケースのギャップを埋める - 元のリポジトリを更新し、ブランチと任意の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 pullgit branchgit checkout some_branchというように、あなたが今、あなたのリモートリポジトリに接続し、通常の完全なGitのレポを持っているので。

+0

あなたはsome_branchについて言及した唯一の人です。私は具体的に枝の例を見つけようとしていましたが、これは枝のためにGoogle上で暑かったし、OQの一部です。 ... – blamb

1

これは、それがどのように動作するかです:

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

ほら!

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

魔法は、git initだけでも、作業ディレクトリにファイルが表示されないということです。ルートディレクトリをチェックアウトする必要があります。

6

裸のリポジトリは、作業ディレクトリの.gitディレクトリと、ローカル設定ファイルのエントリです。私は完全な1に裸のリポジトリを変換にやったことです:

  • 新しいサブディレクトリ.gitを作成して、裸のリポジトリからすべてのファイルを移動しそこで
  • 編集bare = false
  • bare = trueを変更する .git/configファイル
  • 必要なブランチを確認してください。リポジトリから作業ディレクトリにすべてのファイルが抽出されます。
あなたがWindows上.gitディレクトリに隠し属性を設定することができ

が、ディレクトリ内のファイルにない

+1

魅力的な作品です。 bitbucketのインストールからリポジトリを回復するのに役立ちました。 – ibai

+0

よろしくお願いします!これは完全に私のために働いた – Olu

関連する問題