获取裸存储库的工作副本

问题描述 投票:26回答:6

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

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

git working-directory git-bare
6个回答
27
投票

您可以简单地将存储库克隆到同一台机器上的另一个目录:

git clone /bare/repo/dir.git

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

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


14
投票

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

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

您可以在Windows上的.git目录中设置Hidden属性,但不能在目录中的文件上设置。


14
投票

我一直在寻找“独立工作树”的方法(如here所见):

git init --bare

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

git checkout -f

4
投票

这是另外两个答案的riff,但它填补了我的用例的空白 - 它适用于更新来自原点的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 [email protected]:swift/swift.git

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


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不会使您的文件出现在工作目录中。你必须签出根目录。


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
© www.soinside.com 2019 - 2024. All rights reserved.