获取裸存储库的工作副本

Jon*_*ard 31 git working-directory git-bare

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

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

use*_*342 30

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

git clone /bare/repo/dir.git
Run Code Online (Sandbox Code Playgroud)

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

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


ygo*_*goe 18

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

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

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

  • 奇迹般有效.帮助从bitbucket安装中恢复存储库. (2认同)

Jon*_*ard 16

我一直在寻找的"超然工作树"的方法(如看到这里):

git init --bare

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

git checkout -f
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您需要在`core.worktree`行之前运行`core.bare`,如博客帖子的评论中所述(并且我刚刚确认).否则你会得到错误`fatal:core.bare和core.worktree没有意义. (4认同)

Gre*_*egT 5

这是对其他 2 个答案的重复,但它填补了我的用例的空白——它适用于从源更新存储库并检查分支和任何 git 操作,因为您最终会得到一个正常的完整 git 存储库。

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
Run Code Online (Sandbox Code Playgroud)

执行完这 3 行代码后,您可以git pull等等git branchgit checkout some_branch因为您现在有一个正常的完整 git 存储库连接到远程存储库。


Adr*_*n W 5

它是这样工作的:

\n\n
$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir\n$ cd /path/to/workdir\n$ git checkout .\n
Run Code Online (Sandbox Code Playgroud)\n\n

瞧\xc3\xa0!

\n\n

信息:git init将报告:Reinitialized existing Git repository in /path/to/existing-bare-repository。但要自信。man git-init说:\n在现有存储库中运行 git init 是安全的。它不会覆盖已经存在的东西。

\n\n

神奇的是,git init仅此一项并不会使您的文件出现在工作目录中。您必须签出根目录。

\n


Tom*_*mas 5

这对我有用:

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

此命令将从存储库中提取所有文件到指定的目录 path-to-target