所以我一直困扰着我和其他一些开发人员无法解决的这个奇怪的git问题。这是:
我在测试服务器上使用git创建了一个用于管理网站更改的裸仓库。 对于此示例,repo位于:/home/website/website.git 网站公共根目录将在这里:/ home / website
我通过执行以下命令创建了repo:git init --bare 在git repo目录下“website.git”
接下来,我在其他地方的机器上有我的本地仓库。这是一个标准的git repo。我构建了网站,准备好部署。当它准备就绪时,我把它推到了裸仓。从我当地的回购。 有一个post-receive钩子,它将最新的文件树检查到网站的公共根目录中。因此,当我更改本地存储库中的内容并在localhost环境中测试它们时,一旦满意,我就可以将它们推送到实时服务器。
这是我面临的问题: 我可以推得很好。没有问题。一切都按预期工作。代码将签出到公共根目录。每个人都很开心,继续他们的生活。
BUT !!!: 该网站是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,以确保我不会以某种方式丢失它。确保所有文件都归正确的用户所有。递归地说。我也试过这个问题的标准解决方案,这里描述:https://answers.atlassian.com/questions/132671/git-commit-fails-with-sourcetree-error-unable-to-create-temporary-sha1-filename-git-objects-d8-file-exists 那也没有用。不知道从哪里开始。
请帮助我!!!! 我觉得Linus现在正在对我采取残酷的伎俩。
答案 0 :(得分:1)
您在/ home /website/website.git中有一个裸git存储库,它位于/ home / website中的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
答案 1 :(得分:0)
我得到了解决方案。就是这个。我从git repo运行上面的命令。
结果命令应该从工作树运行并改变为如下所示:
GIT_WORK_TREE=/home/website/ git --git-dir="./website.git/" add ./