【问题标题】:Bare Git repo cannot add files or commit files裸 Git 仓库无法添加文件或提交文件
【发布时间】:2013-04-13 06:00:49
【问题描述】:

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

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

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

接下来,我在其他地方的机器上拥有本地仓库。这是一个标准的 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-filename-git-objects-d8-file-exists 那也没有用。不知道从这里去哪里。

请帮助我!!!! 我觉得现在 Linus 正在对我耍残忍的把戏。

【问题讨论】:

    标签: linux git permissions centos


    【解决方案1】:

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

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

    GIT_WORK_TREE=/home/website/  git --git-dir="./website.git/"  add ./
    

    【讨论】:

      【解决方案2】:

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

      也许值得了解此设置,但前提是您打算成为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
      

      【讨论】:

      • 感谢您的回复。明天早上我将尝试实施此解决方案。您知道为什么会出现权限问题吗?
      • @GoZoner 我认为您缺少一两步,set-url 的网址是错误的。由于/home/website 并不是真正的git repo,他可能需要在最后一步之前使用git init 进行设置。网址应该是/home/repo/website.git,不是吗?他可能需要获取 master 分支并将其同步到 repo 的当前 master。
      • 谢谢。 /home/website 已经是一个 .git 存储库。我修复了set-url 目标。
      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多