Подтвердить что ты не робот

Какие еще более эффективные способы, чем .gitignore хранить (принудительно) файлы из репо?

Люди из моей команды разработчиков продолжают нажимать на сборные файлы (node_modules и другие) на наши репозитории, несмотря на то, что эти файлы находятся в файле .gitignore, предположительно с git add --all -f или чем-то, что связано с этим.

Это огромная боль и заставить людей прекратить это делать, это сложно.

Есть ли какой-то способ сделать невозможным толкать определенные файлы на репо?

4b9b3361

Ответ 1

Есть ли какой-то способ сделать невозможным толкать определенные файлы на репо?

Да, вы можете использовать такие крючки, чтобы предотвратить блокирование нескольких файлов.

pre-receive hook

#!/bin/sh

# Check to see if this is the first commit in the repository or not
if git rev-parse --verify HEAD >/dev/null 2>&1
then
    # We compare our changes against the previous commit
    against=HEAD^
else
    # Initial commit: diff against an empty tree object
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

# Redirect output to screen.
exec 1>&2

# Check to see if we have updated the given file
if [ $(git diff-tree -r --name-only $against | grep <ANY FILE YOU WANT TO FIND OUT HERE> ) ];
then

    # Output colors
    red='\033[0;31m';
    green='\033[0;32m';
    yellow='\033[0;33m';
    default='\033[0;m';

    # personal touch :-)
    echo "${red}"
    echo "                                         "
    echo "                   |ZZzzz                "
    echo "                   |                     "
    echo "                   |                     "
    echo "      |ZZzzz      /^\            |ZZzzz  "
    echo "      |          |~~~|           |       "
    echo "      |        |-     -|        / \      "
    echo "     /^\       |[]+    |       |^^^|     "
    echo "  |^^^^^^^|    |    +[]|       |   |     "
    echo "  |    +[]|/\/\/\/\^/\/\/\/\/|^^^^^^^|   "
    echo "  |+[]+   |~~~~~~~~~~~~~~~~~~|    +[]|   "
    echo "  |       |  []   /^\   []   |+[]+   |   "
    echo "  |   +[]+|  []  || ||  []   |   +[]+|   "
    echo "  |[]+    |      || ||       |[]+    |   "
    echo "  |_______|------------------|_______|   "
    echo "                                         "
    echo "                                         "
    echo "      ${green}You have just committed code  " 
    echo "      ${red}Your code ${yellow}is bad.!!!      "
    echo "      ${red} Do not ever commit again    "
    echo "                                         "
    echo "${default}"
fi;

# set the exit code to 0 or 1 based upon your needs
# 0 = good to push
# 1 = exit without pushing.
exit 0;

Примечание:

Github не поддерживает использование крючков таким образом.
У них есть свои WebHooks

В этом случае вы также можете использовать крючки, но на стороне клиента.
Тот же код можно поместить внутри pre-commit на стороне клиента.

Ответ 2

Это непростая задача для решения, так как распределяется git.

Фильтры на стороне сервера, такие как фиксации фиксации сообщения (или фиксация фильтров, если вы используете Stash), позволяют пользователям попасть в беспорядок, который невелик.

Ключ предварительной фиксации клиента является более чистым, поскольку он не позволяет пользователям загрязнять их репо, но это решение не является доказательством пули.

Вы можете подойти к проблеме с другой точки зрения и перенести сборку артефактов и промежуточных файлов из своего каталога хранилища.