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 的基本元素")
我检查了 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 的基本元素")