Post-接收挂钩导致生产文件夹中的文件无法跟踪

Post-receive hook causing untracked files in production folder

我检查了 google 中的类似问题,我发现的唯一类似问题是在这个主题中: Post-receive script results in untracked/modified files

情况是这样的。我根据 4.4 Git on the Server - Setting Up the Server 教程进行指导。

在计算机 1 上制作裸仓库:

$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/

将第一个版本推送到计算机 2 上的裸仓库:

# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master

正在计算机 1 上的生产文件夹中克隆

git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master

两台机器看起来都不错 push/pull。

现在在 hook 文件夹中制作 post-receive hook:

#!/bin/bash
while read oldrev newrev ref
do
    if [[ $ref =~ .*/master$ ]];
    then
        echo "Master ref received.  Deploying master branch to production..."
        git --work-tree=/var/www/html/project --git-dir=/srv/git/project.git checkout -f
    else
        echo "Ref $ref successfully received.  Doing nothing: only the master branch may be deployed on this server."
    fi
done

好的。当我提交 2 个文件“test_file1”和“test_file2”时从计算机 2 推送到 bare。成功。 浏览以查看钩子是否在计算机 1 上的生产文件夹中工作。确定文件“test_file1”和“test_file2”在那里。

get status 

在生产文件夹中回应:

On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        public/test_file1
        public/test_file2

nothing added to commit but untracked files present (use "git add" to track)

我在生产文件夹和本地(测试)文件夹中都有 .git 个文件夹。 知道这是否正常吗?以及如何修复它?

你通常不会在 production 文件夹中有一个 .git 文件夹:只有你在裸仓库中的 post-receive 钩子被允许修改 (checkout -f) 说 production文件夹。

A production 文件夹不应该知道关于 Git 的任何信息(除非 Git 是实际 运行 存储在“生产”中的 program/project 的基本元素")