是否有可能拥有一个git存储库(clonable和pushable)本身就是另一个远程repo的克隆?
情景:
我们为我们公司的git托管安装了一个gitorious。我们希望保持更新,但添加一些非常私有的功能(主要是部署脚本),因此需要一个可推送的项目。所需的工作流程将是:
PS。由于这些部署脚本非常敏感,因此我不能简单地使用它来制作公共克隆并使用它。
答案 0 :(得分:5)
不确定。像git
这样的分布式版本控制系统背后的整个想法是没有存储库是“特殊的”。任何存储库都可以是零个,一个或多个其他存储库的克隆或目标。
例如,假设我有一个存储库repo1.git
,我可以这样做:
$ git clone --bare repo1.git repo2.git
$ git clone repo2.git repo3
$ cd repo3
$ ...make some changes and commit...
$ git push
$ cd ../repo2.git
$ git push
如果你遵循这个,你可以看到我推了repo3 - > repo2,然后repo2 - > repo1。
回应你的评论:
您无法在裸存储库中运行git checkout
。这就是fatal: This operation must be run in a work tree
的含义。当您git clone
存储库时,您会得到两件事:
.git
目录和checkout
,pull
)仅在您与工作副本交互时才有意义。但是,请注意,将推入非裸存储库(即具有关联工作树的存储库)是很棘手的;没有显式配置,git会抛出错误。您会看到以下内容:
To /home/lars/tmp/so/repo
! [remote rejected] foo -> foo (branch is currently checked out)
error: failed to push some refs to '/home/lars/tmp/so/repo'
这是因为如果其他人正在进行更改,那么在工作树下面的存储库中发生更改将会令人惊讶。你可以阅读更多 在this answer。