我有一个服务器,我有一个空仓库推送。但是,我的服务器需要有master分支的工作副本。我如何获得一个工作副本,并且只能从一个裸存储库中获得?
svdrlsy41#
您可以简单地将存储库克隆到同一台机器上的另一个目录:
git clone /bare/repo/dir
当前目录将成为您的存储库的非裸克隆,并且您将自动检出master分支。然后根据需要使用常用命令(如git pull)更新它。附带的好处是,这个操作非常高效--如果你指定一个本地目录到git clone,git将使用硬链接来共享两个仓库的对象数据库的只读部分。
master
git pull
git clone
guz6ccqo2#
空仓库只是工作目录的.git目录,以及本地配置文件中的一个条目。我所做的将一个裸仓库转换为一个完整的仓库是:
.git
.git/config
bare = true
bare = false
您可以在Windows上的.git目录上设置Hidden属性,但 * 不能 * 在目录中的文件上设置。
k4aesqcs3#
我正在寻找“分离的工作树”方法(如here所示):
git init --bare git config core.bare false git config core.worktree /somewhere/else/ git checkout -f
6za6bjd04#
这对我很有效:git --git-dir=path-to-bare-repo.git --work-tree=path-to-target checkout master .此命令将从存储库中提取所有文件到path-to-target指定的目录
git --git-dir=path-to-bare-repo.git --work-tree=path-to-target checkout master .
path-to-target
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 pull、git branch和git checkout some_branch等等,因为你现在有一个正常的完整的git仓库连接到你的远程仓库。
git branch
git checkout some_branch
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 根目录。
git init
Reinitialized existing Git repository in /path/to/existing-bare-repository
man git-init
kuhbmx9i7#
还可以考虑使用https://git-scm.com/docs/git-worktree它应该允许从一个裸仓库创建一个本地工作副本,而不需要克隆它(如果仓库很大,这可以保存空间)
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
8条答案
按热度按时间svdrlsy41#
您可以简单地将存储库克隆到同一台机器上的另一个目录:
当前目录将成为您的存储库的非裸克隆,并且您将自动检出
master
分支。然后根据需要使用常用命令(如git pull
)更新它。附带的好处是,这个操作非常高效--如果你指定一个本地目录到
git clone
,git将使用硬链接来共享两个仓库的对象数据库的只读部分。guz6ccqo2#
空仓库只是工作目录的.git目录,以及本地配置文件中的一个条目。我所做的将一个裸仓库转换为一个完整的仓库是:
.git
,并将裸存储库中的所有文件移到该子目录中.git/config
文件,将bare = true
更改为bare = false
您可以在Windows上的
.git
目录上设置Hidden属性,但 * 不能 * 在目录中的文件上设置。k4aesqcs3#
我正在寻找“分离的工作树”方法(如here所示):
6za6bjd04#
这对我很有效:
git --git-dir=path-to-bare-repo.git --work-tree=path-to-target checkout master .
此命令将从存储库中提取所有文件到
path-to-target
指定的目录im9ewurl5#
这是对其他两个答案的重复,但它填补了我的用例差距-它适用于从原点更新repo并检查分支和任何git操作,因为你最终会得到一个正常的完整git repo。
在执行了这3行代码之后,你就可以执行
git pull
、git branch
和git checkout some_branch
等等,因为你现在有一个正常的完整的git仓库连接到你的远程仓库。zfycwa2u6#
它是这样工作的:
瞧!
信息:
git init
将报告:Reinitialized existing Git repository in /path/to/existing-bare-repository
但要有信心。man git-init
说:* 在现有仓库中运行git init是安全的。它不会覆盖已经存在的内容。*神奇的是,
git init
本身不会使您的文件出现在工作目录中。你必须 checkout 根目录。kuhbmx9i7#
还可以考虑使用
https://git-scm.com/docs/git-worktree
它应该允许从一个裸仓库创建一个本地工作副本,而不需要克隆它(如果仓库很大,这可以保存空间)
woobm2wo8#
你可以使用'git show'。
http://www.kernel.org/pub/software/scm/git/docs/git-show.html
基本上: