从裸露的远程仓库克隆时缺少提交

时间:2013-06-24 18:58:13

标签: git git-bare

我有一个小的PHP库,我编写它来支持各种Web项目。这些项目都是git,而库是每个repos的子模块。使用git push部署Web项目,部署脚本需要访问库子模块repo才能更新库。

有时对于任何给定的项目,库都会有自己的分支,直到我将这些更改合并回主分支。

我为该库设置了一个裸的远程仓库,并且能够将库子模块推送到远程仓库。这工作正常,我可以在远程仓库中看到这些提交。但是,当我尝试部署时,无法找到这些提交。事实上,如果我自己克隆远程仓库,我找不到那些提交。

例如,远程仓库看起来像这样: -

git log --graph --oneline --date-order

* 9c9b880 (BRANCHA)
* e88ee92
* 07260c9
* 40b0963
*   35b6533 (tag: dev/0.0.2, master) Merge branch 'refs/heads/development'
|\  
| * ba3c1bd (HEAD, development)
| * eefa611
| *   1b87828 Merge branch 'refs/heads/BRANCHB' into development
| |\  
| | * 9078c1c (BRANCHB)
| |/  
| * 834e715
| * a000cd7
|/  
* 5985fc9 Initial commit

但是,如果我按如下方式克隆远程仓库: -

git clone -b BRANCHA http://pathto/repo.git

然后克隆的回购看起来像: -

git log --graph --oneline --date-order

* 07260c9 (HEAD, origin/BRANCHA, BRANCHA)
* 40b0963 
*   35b6533 (tag: dev/0.0.2, origin/master) Merge branch 'refs/heads/development
|\  
| * ba3c1bd (origin/development, origin/HEAD)
| * eefa611
| *   1b87828 Merge branch 'refs/heads/BRANCHB' into development
| |\  
| | * 9078c1c (origin/BRANCHB)
| |/  
| * 834e715
| * a000cd7
|/  
* 5985fc9

如果我git pull我是Already up-to-date.

为什么当我克隆时,我最终会提交07260c9,而不是提交9c9b880,为什么不拉动那些后来的提交?我错过了一些关于远程回购应该如何工作的东西,或者我应该以不同的方式推动裸仓库?

1 个答案:

答案 0 :(得分:4)

向@Chronial道具,指出我正确的方向......

事实证明,sit上的git与http上的git不完全相同。也许一个git-fu专家可以解释原因,但解决方案很简单。在远程仓库: -

git update-server-info

将repo通过http获取,与repo的当前状态同步(通过ssh获取)。

看来这必须在每次推送到远程仓库后运行,但这就像将仓库的hooks目录中的文件post-update.sample重命名为post-update一样简单,后者运行以下命令每次推送后脚本: -

#!/bin/sh

exec git update-server-info