如何防止使用 git 挂钩提交文件 (.json)?
How can I prevent a file (.json) to be commited with a git hook?
如何防止文件 (.json) 被 git 挂钩提交?
我有一个 .json 在服务器上。所以我不能使用 git 忽略。但是现在我不想让任何人更改(提交)这个文件,因为它会破坏某些东西。我想使用本地挂钩。
我怎样才能在提交中获得特殊文件?
你能告诉我如何实现这个吗?
感谢您的帮助。
一个pre-commit
样本:
#!/bin/bash
ipath="foo/bar.json"
git diff --cached --name-only | if grep -qE "^$ipath$";then
git reset HEAD -- "$ipath"
echo "Warning: $ipath is removed from the index. It's not allowed to be committed."
fi
git diff --cached --name-only
列出所有将要提交的更改文件。如果在列表中找到 foo/bar.json
,则 git reset HEAD -- foo/bar.json
将其从索引中删除,这样它就不会提交,而是留在工作树中。
它很适合你。但是,您不能确保它对其他人也适用。例如,其他贡献者可能会从他们的本地存储库中删除它。您需要的是中央存储库中的 pre-receive
挂钩,即服务器端的挂钩。如果传入提交触及 foo/bar.json
.
,它会拒绝任何推送
一个pre-receive
样本:
#!/bin/bash
ipath="foo/bar.json"
zero="0000000000000000000000000000000000000000"
while read old new name;do
if [ "$zero" == "$old" ];then
#creating new ref, do something here
continue
fi
if [ "$zero" == "$new" ];then
#deleting a ref, do something here
continue
fi
#updating a ref, check if the incoming commits touch `foo/bar.json`
git diff $old..$new --name-only | if grep -qE "^$ipath$";then
c=$(git log $old..$new --pretty=%H -- $ipath)
echo "Error: $ipath is changed in:"
echo $c
echo "Error: $ipath is not allowed to be committed and pushed."
exit 1
fi
done
贡献者在git push
后收到错误信息。在再次尝试之前,他们必须修改他们的提交并删除 foo/bar.json
的更改。 pre-receive
中需要处理deleting a ref
和creating a ref
如何防止文件 (.json) 被 git 挂钩提交?
我有一个 .json 在服务器上。所以我不能使用 git 忽略。但是现在我不想让任何人更改(提交)这个文件,因为它会破坏某些东西。我想使用本地挂钩。
我怎样才能在提交中获得特殊文件?
你能告诉我如何实现这个吗?
感谢您的帮助。
一个pre-commit
样本:
#!/bin/bash
ipath="foo/bar.json"
git diff --cached --name-only | if grep -qE "^$ipath$";then
git reset HEAD -- "$ipath"
echo "Warning: $ipath is removed from the index. It's not allowed to be committed."
fi
git diff --cached --name-only
列出所有将要提交的更改文件。如果在列表中找到 foo/bar.json
,则 git reset HEAD -- foo/bar.json
将其从索引中删除,这样它就不会提交,而是留在工作树中。
它很适合你。但是,您不能确保它对其他人也适用。例如,其他贡献者可能会从他们的本地存储库中删除它。您需要的是中央存储库中的 pre-receive
挂钩,即服务器端的挂钩。如果传入提交触及 foo/bar.json
.
一个pre-receive
样本:
#!/bin/bash
ipath="foo/bar.json"
zero="0000000000000000000000000000000000000000"
while read old new name;do
if [ "$zero" == "$old" ];then
#creating new ref, do something here
continue
fi
if [ "$zero" == "$new" ];then
#deleting a ref, do something here
continue
fi
#updating a ref, check if the incoming commits touch `foo/bar.json`
git diff $old..$new --name-only | if grep -qE "^$ipath$";then
c=$(git log $old..$new --pretty=%H -- $ipath)
echo "Error: $ipath is changed in:"
echo $c
echo "Error: $ipath is not allowed to be committed and pushed."
exit 1
fi
done
贡献者在git push
后收到错误信息。在再次尝试之前,他们必须修改他们的提交并删除 foo/bar.json
的更改。 pre-receive
中需要处理deleting a ref
和creating a ref