这有点奇怪,如果在我的具体情况之外没有太多应用,我提前道歉。我正在使用 git 通过提交和标记一组与部署相关的生成文件和指向发布代码的子模块来管理我的部署包。我正在尝试从每台机器上的裸仓库中将此部署标签的 git 签出到不同的空目录中。我得到的输出表明它已经删除了它应该创建的文件,并且工作树目录之后仍然是空的。
$ ls -al /var/www/test/
total 0
$ git --bare --work-tree=/var/www/test/ checkout my_tag
D .gitmodules
D generated.tgz
D release
D signatures.md5
HEAD is now at 8946ff5... Generated contents of deployment package.
$ ls -al /var/www/test/
total 0
我应该声明 my_tag 引用的提交和 master 的提示都具有相同的 4 个文件(尽管内容不同)。这让我很奇怪,以下程序让我走了 75% 的路:
$ git --bare --work-tree=/var/www/test/ checkout master
D .gitmodules
Previous HEAD position was 8946ff5... Generated contents of deployment package.
Switched to branch 'master'
$ ls -al /var/www/test/
total 4
-rw-r--r-- 1 root root 0 Oct 17 17:00 generated.tgz
drwxr-xr-x 2 root root 4096 Oct 17 17:00 release
-rw-r--r-- 1 root root 0 Oct 17 17:00 signatures.md5
$ git --bare --work-tree=/var/www/test/ checkout my_tag
D .gitmodules
(---- git's warning about detached HEAD state cut ----)
HEAD is now at 8946ff5... Generated contents of deployment package
$ ls -al /var/www/test/
total 4624
-rw-r--r-- 1 root root 2103765 Oct 17 17:02 generated.tgz
drwxr-xr-x 2 root root 4096 Oct 17 17:00 release
-rw-r--r-- 1 root root 2614883 Oct 17 17:02 signatures.md5
问题是,“发布”是一个 git 子模块,如果没有 .gitmodules,我无法初始化或更新它,所以 75% 的方法仍然不够好。
这个问题的一个解决方案是每次部署时都简单地重新克隆 repo,如果没有人能提出更好的解决方案,我可能会这样做。但理想情况下,我想在每台机器上保留一个裸仓库,每次都从该仓库签出到新的工作树。谁能告诉我这里发生了什么?
作为参考,我使用的是 Git 1.8.2.1。