将Git推送到远程仓库时出现“没有这样的文件或目录”错误

3
我正在尝试将本地机器上的更改推送到在线服务器。我根据该页面上的步骤进行操作。
在我的本地机器上,当我运行以下代码时,会得到以下输出:$ git push web
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: /bin/bash: GIT_WORK_TREE=/var/www/html git checkout -f: No such file or directory
To ssh://MyDomainRemoved.com/var/git/myproject.git
   d8a9173..7903ea9  master -> master

线服务器上,新的提交会出现在$ git log中。它与post-receive钩子有问题。这是目前post-receive文件的样子:

#!/bin/bash GIT_WORK_TREE=/var/www/html git checkout -f

我已经尝试过一些其他帖子中提到的方法:

  • 尝试使用 #!/bin/bash#!/bin/sh
  • 移除了 #!/bin/bash 行上隐藏的回车符。这使得bash无需打开错误即可运行,但仍然出现了“没有此文件”的错误。
  • /var/www/的所有权更改为用户www-data
  • /var/www/ 的 CHMOD 更改为777(仍然出现“没有此文件”的错误)

服务器是Ubuntu 16.04。

还有其他尝试的想法吗?


1
请包括 git remote -v 的输出。 - orvi
@orvi 确定,这是您需要的内容:$ git remote -v origin ssh://git@bitbucket.org/myusername/myproject.git (获取) origin ssh://git@bitbucket.org/myusername/myproject.git (推送) web ssh://root@MyDomainRemoved.com/var/git/myproject.git (获取) web ssh://root@MyDomainRemoved.com/var/git/myproject.git (推送) - Wes
你的 post-receive 文件在哪里? - orvi
@orvi 它在 /var/git/myproject.git/hooks 中。 - Wes
好的。现在按照以下方式编辑post-receive文件:#!/bin/bash export GIT_DIR=/var/git/myproject/.git/ export GIT_WORK_TREE=/var/git/myproject/ cd /var/git.myproject/ git fetch git merge origin/master git submodule update --init --recursive - orvi
@orvi 感谢你在这方面的帮助。看起来我可能漏了 GIT_DIR= 这个主要部分,因为它是你和 @VonC 的主要区别,而最终选择了 VonC 的方法,因为它能完成任务,而不需要其他可能用不到的命令。 - Wes
1个回答

1

请确保您的脚本分成几行,而不是一行:

#!/bin/bash 
GIT_WORK_TREE=/var/www/html git checkout -f

完整的命令应该是:

git --work-tree=/var/www/html --git-dir=/var/git/myproject/.git checkout -f

这个可行。谢谢@VonC!最终的代码与您的类似,但/myproject/.git中没有/ - Wes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接