获取裸存储库的工作副本

时间:2012-09-16 20:00:01

标签: git working-directory git-bare

我有一个服务器,我有一个裸存储库用于推送。但是,我的服务器需要有一个主分支的工作副本。

如何从裸存储库中获取工作副本?

7 个答案:

答案 0 :(得分:26)

您只需将存储库克隆到同一台计算机上的另一个目录:

git clone /bare/repo/dir.git

当前目录将成为您的repo的非裸克隆,您将自动检出master分支。然后使用常用命令git pull根据需要更新它。

作为附带好处,此操作非常有效 - 如果您为git clone指定本地目录,git将尝试使用硬链接在这两个repos之间共享对象。

答案 1 :(得分:14)

裸存储库只是工作目录的.git目录,是本地配置文件中的条目。我对将裸存储库转换为完整存储库所做的是:

  • 创建一个新的子目录TypedFactoryFacility并从那里的裸存储库移动所有文件
  • 修改.git文件,将.git/config更改为bare = true
  • 查看您想要的分支机构。这会将存储库中的所有文件提取到工作目录中。

您可以在Windows上的bare = false目录中设置隐藏属性,但在目录中的文件上设置

答案 2 :(得分:4)

这是其他2个答案的重复,但它填补了我的用例的空白 - 它适用于更新来自原点的repo并检查分支和任何git操作,因为你最终得到一个正常的完整git repo

git clone /path/to/bare/repo /new/path/to/full/repo
cd /new/path/to/full/repo
git remote set-url origin git@github.com:swift/swift.git

执行这三行代码之后,您可以git pullgit branch以及git checkout some_branch等等,因为您现在有一个连接到远程仓库的正常完整git仓库。

答案 3 :(得分:2)

这对我有用:

git --git-dir=path-to-bare-repo.git --work-tree=path-to-target checkout master .

此命令会将所有文件从资源库提取到path-to-target指定的目录

答案 4 :(得分:1)

你可以使用'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

答案 5 :(得分: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 :(得分:1)

也考虑使用

https://git-scm.com/docs/git-worktree

它应该允许从裸仓库创建本地工作副本而无需克隆它(如果仓库很大,这可以节省空间)