git 获取裸存储库的工作副本

i34xakig  于 2023-09-29  发布在  Git
关注(0)|答案(8)|浏览(111)

我有一个服务器,我有一个空仓库推送。但是,我的服务器需要有master分支的工作副本。
我如何获得一个工作副本,并且只能从一个裸存储库中获得?

svdrlsy4

svdrlsy41#

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

git clone /bare/repo/dir

当前目录将成为您的存储库的非裸克隆,并且您将自动检出master分支。然后根据需要使用常用命令(如git pull)更新它。
附带的好处是,这个操作非常高效--如果你指定一个本地目录到git clone,git将使用硬链接来共享两个仓库的对象数据库的只读部分。

guz6ccqo

guz6ccqo2#

空仓库只是工作目录的.git目录,以及本地配置文件中的一个条目。我所做的将一个裸仓库转换为一个完整的仓库是:

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

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

k4aesqcs

k4aesqcs3#

我正在寻找“分离的工作树”方法(如here所示):

git init --bare

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

git checkout -f
6za6bjd0

6za6bjd04#

这对我很有效:
git --git-dir=path-to-bare-repo.git --work-tree=path-to-target checkout master .
此命令将从存储库中提取所有文件到path-to-target指定的目录

im9ewurl

im9ewurl5#

这是对其他两个答案的重复,但它填补了我的用例差距-它适用于从原点更新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 branchgit checkout some_branch等等,因为你现在有一个正常的完整的git仓库连接到你的远程仓库。

zfycwa2u

zfycwa2u6#

它是这样工作的:

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

kuhbmx9i

kuhbmx9i7#

还可以考虑使用
https://git-scm.com/docs/git-worktree
它应该允许从一个裸仓库创建一个本地工作副本,而不需要克隆它(如果仓库很大,这可以保存空间)

woobm2wo

woobm2wo8#

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

相关问题