2012-09-16 54 views

回答

18

你可以简单地克隆仓库到另一个目录在同一台机器上:

git clone /bare/repo/dir.git 

当前目录将成为您的回购非裸克隆,你会得到master分支的结账自动。然后使用通常的命令如git pull根据需要更新它。

作为一项优势,此操作非常高效 - 如果您指定本地目录为git clone,那么git将尝试使用硬链接在这两个回购站之间共享对象。

+0

此操作是否适用于更新? –

+0

什么样的更新?克隆的存储库只是另一个克隆,所以它的工作树需要使用'git pull'进行更新。如果您需要自动发生这种情况,您可以安排服务器的“post-receive”挂钩在克隆上运行“git pull”。 – user4815162342

+0

哦,对,显然。我在“克隆”方面想的太多了。 –

8

我一直在寻找的 “超然工作树” 的方法(如图here):

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

这关的其他2即兴答案,但它填补了我的使用案例的空白 - 它用于更新来源的回购和检查分支和任何git操作,因为你最终得到一个正常的比较lete 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等等,因为你现在有连接到远程回购正常完整的混帐回购协议。

+0

你提到some_branch的唯一一个,你应该详细说明。我特意试图找到一个分支的例子,这个分支在谷歌上很热门,并且是OQ的一部分。 ... – blamb

1

这是它如何工作的:

$ 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本身并不会让你的文件出现在工作目录中。你必须检出根目录。

6

裸存储库只是工作目录的.git目录,并且是本地配置文件中的一个条目。我所做的,以转换纯仓库成为一个完整的一个是:

  • 创建一个新的子目录.git,并从纯仓库在那里将所有文件
  • 编辑.git/config文件改变bare = truebare = false
  • 查看你想要的分支。这将从存储库中提取所有文件到工作目录中。

您可以为Windows上的.git目录中的隐藏属性,但在目录中的文件。

+1

工程就像一个魅力。帮助从bitbucket安装中恢复存储库。 – ibai

+0

真棒..!这完全为我工作 – Olu

相关问题