【问题标题】:Why does `git pull` fail on my webserver?为什么 `git pull` 在我的网络服务器上失败?
【发布时间】:2019-01-25 19:23:59
【问题描述】:

我使用 git 对网站的代码库进行更改。文件内部的更改和文件的删除有效,但是,当我将新文件或目录(不是空的)添加到存储库时,它不会在本地拉到网络服务器,拉时不显示错误消息但检查该文件时,它不存在。在 bitbucket 存储库中在线显示。

试图删除本地 git repo 并再次克隆它,这样我就可以从源中获取所有文件,但是在拉取新添加的文件时问题仍然存在。它显示好像它被拉了:

...
   18bb8ac..c9c1e40  master     -> origin/master
Updating 18bb8ac..c9c1e40
Fast-forward
 config/plugins/test1.txt   | 22 ++++++++++++++++++++++
 config/plugins/testing.txt | 22 ++++++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 config/plugins/test1.txt
 create mode 100644 config/plugins/testing.txt

但在检查 (ls -la config/plugins/) 时,新文件不存在。即使我尝试使用sudo git pull 拉动。

我很努力,但在此之后我无法使文件出现,除非我删除整个本地 repo 并再次克隆它。没有硬重置,似乎没有任何帮助。

我做了什么检查:

  • 确保在相关文件中实际保存了更改。
  • 确保文件不符合我在 .gitignore 和 .git/info/exclude 中的排除规则
  • 确保不尝试添加空文件夹。 Git 不会跟踪这些。

我在网络服务器上对这个 repo 的权限设置基于: https://www.agix.com.au/git-a-walk-through-for-sysadmins/

原来如此:

sudo chown apache:apache -R /var/www/html/sites/mysite
cd /var/www/html/sites/mysite
# File permissions, recursive
sudo find . -type f -exec chmod 0644 {} \;
# Dir permissions, recursive
sudo find . -type d -exec chmod 0755 {} \;
sudo setfacl -R -b -m user:root:rwx -m d:user:root:rwx -m group:developers:rwx -m d:group:developers:rwx -m group:apache:rx -m d:user:apache:rx /var/www/html/sites/mysite

我的用户在开发者组中。

这是来自服务器的我的.git 目录。

我正在使用 CentOS7 和 git 2.16.3。

【问题讨论】:

  • 考虑目录栏
  • @NicolásAlarcónR。请更详细地描述您想要提示/询问的内容。
  • 您确定新文件与存储库中的活动文件位于同一分支中吗?
  • @LajosArpad 我在这个 repo 上有一个单独的分支“master”,但是如果你提到别的东西,请提供命令来返回它的结果来扩展我的问题
  • 所以如果你运行 git branch,你会在 pull 之后看到这个单一的分支吗?

标签: git centos7 file-permissions


【解决方案1】:

将文件拉到同一服务器上的其他存储库有效,因此我完全删除了这个有问题的存储库的远程存储库和本地 .git 目录,并创建了一个新的远程存储库并将现有文件添加到其中。只有这样才能解决问题。

希望下次如果问题再次出现,我可以更新这个答案,并提供更多线索,说明我对 repo 做了什么导致它发疯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2013-12-10
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多