0

所以我一直被这个奇怪的 git 问题所困扰,我自己和其他一些开发人员都无法解决。这里是:

我创建了一个裸仓库,用于在测试服务器上使用 git 管理网站更改。对于这个例子,repo 在这里:/home/website/website.git 网站公共根目录在这里:/home/website

我通过执行以下命令创建了 repo:git repo 目录“website.git”中的 git init --bare

接下来,我在其他地方的机器上拥有我的本地仓库。这是一个标准的 git 仓库。我建立了网站,准备好部署。准备好后,我将其推送到裸仓库。来自我的本地仓库。有一个接收后挂钩可以将最新的文件树检出到网站的公共根目录中。因此,当我在本地 repo 上更改内容并在 localhost 环境中对其进行测试时,一旦满意,我就可以将它们推送到实时服务器。

这是我面临的问题:我可以很好地推动。没有问题。一切都按预期工作。代码被检出到公共根目录。每个人都很开心,继续他们的生活。

但是!!!:该站点是一个CMS站点。用户登录并上传内容。文件在网站的公共根目录上创建,即 GIT_WORK_TREE。

所以NBD对吧?!我可以时不时地从实时的裸仓库中提交文件,然后像以前一样将它们拉回我的本地环境。所以我在服务器上登录 SSH。导航到 /home/website/website.git 然后运行这个命令:GIT_WORK_TREE=/home/website/ git add ../

我得到了这个烂摊子:

error: unable to create temporary sha1 filename ./objects/cb: No such file or directory
error: error_log: failed to insert into database
error: unable to index file error_log
fatal: adding files failed

我以前在其他服务器上做过这个,据我记得它工作得很好。所以我就像WTF一样,这台服务器上一定有什么奇怪的东西。我去了另一台服务器,并复制了完全相同的步骤。得到了完全相同的问题。所以现在我担心我正在失去理智,也许这些以前的 git 经验都是在我的脑海中编造的...... *好吧,让我们不要走那么远...... :)

也许有人可以在这里帮助我。我已经使用了很多 git,但似乎无法破解这个。

哦,其他一些可能有用的规范:运行 CENTOS 6.2

我仔细检查了所有权限。我什至尝试以递归方式将所有内容更改为 777,以确保我不会以某种方式丢失它。确保所有文件都归正确的用户所有。递归地chown。我还尝试了这里描述的这个问题的标准解决方案:https ://answers.atlassian.com/questions/132671/git-commit-fails-with-sourcetree-error-unable-to-create-temporary-sha1-文件名-git-objects-d8-file-exists 那也没用。不知道从这里去哪里。

请帮我!!!!我觉得 Linus 现在正在对我玩残酷的把戏。

4

2 回答 2

1

您在 /home/website/website.git 中有一个裸 git 存储库,它位于 /home/website 的 git 存储库中?然后你试图欺骗裸 git 存储库使用GIT_WORK_TREE?

也许值得了解此设置,但前提是您打算成为git开发人员。由于您是专注于提供网站功能的用户,我建议使用标准git设置。

将裸 git 存储库移至别处:

$ mkdir /home/repo
$ mv /home/website/website.git /home/repo/website.git
$ cd /home/website
$ git remote set-url origin /home/repo/website.git
于 2013-04-20T00:33:21.497 回答
0

我得到了解决方案。就是这个。我正在从 git repo 运行上述命令。

原来该命令应该从工作树运行并更改为如下所示:

GIT_WORK_TREE=/home/website/  git --git-dir="./website.git/"  add ./
于 2013-04-29T13:20:08.190 回答