Я новичок в git, страдающий от предыдущего опыта svn. Многие из моих проектов используют код из моих собственных библиотек, поэтому, естественно, я хочу использовать некоторые функции «externals-like» от git. В настоящее время я пытаюсь использовать подмодули.Создание файлов в подмодулях только для чтения
Но подмодули (насколько я понимаю) могут обеспечить большую боль, если вы используете их неправильно (например, смените файлы в подмодуле и забудьте нажать их или забыть их совершить).
Что делать, если я делаю все файлы в подмодулях только для чтения? Это достаточно хорошая защита от случайных изменений. И если я действительно хочу что-то изменить, я должен пойти и внести изменения в исходное репо.
Итак, мой вопрос:
- Это хорошая идея, или я пытаюсь изобретать колесо?
- Что это самый простой способ сделать это?
EDIT: Я надеюсь, что это может быть достигнуто с помощью git-крючков, но я не уверен, как именно. Я не могу использовать клиентские крючки при клонировании репо в первый раз, могу ли я?
EDIT2: С помощью SRobertz я смог придумать после оформления заказа крючка:
echo "you just checked out: $*"
echo "submodules:"
for p in `grep path .gitmodules | sed 's/.*= //'`; do # get submodules list
echo "making submodule directory $p read-only"
chmod -R a-w $p;
SAVEIFS=$IFS
IFS=$(echo -en "\n\b") #set delimeter to \n\b to handle whitespaces in filenames
for f in `ls $p`; do #get files in submodule dir
echo "making file $f in directory $p read-only"
chmod -R a-w $p\\$f;
done
IFS=$SAVEIFS #restore delimeter to default value
done
Теперь проблема заключается в том, что при клонировании нового репо, этот крючок срабатывает слишком рано, когда подмодуль каталогов уже созданы, но файлы в них еще не вытащены.
Я думаю, что самый простой способ сделать это - это то, что вы предложили: не редактировать файлы в подмодулях; просто отредактируйте исходный репозиторий, а затем обновите свои подмодули. Я бы не стал пытаться делать вещи только для чтения. Просто не редактируйте их. – larsks
Я действительно их редактировал случайно. Также я работаю с некоторыми людьми, которые могут игнорировать предупреждения от git. Таким образом, делать файлы readonly были бы удобными. – Amomum
Клики на стороне клиента являются клиентскими, поэтому каждый пользователь должен их настроить. Но вы можете автоматизировать/пакет. См. Например, http://stackoverflow.com/questions/427207/can-git-hook-scripts-be-managed-along-with-the-repository, http://stackoverflow.com/questions/3462955/putting- ГИТ-крюки-в-хранилище. Некоторое обсуждение вопроса о том, почему вы должны установить крючки на стороне клиента: http://git.661346.n2.nabble.com/Is-there-any-way-to-make-hooks-part-of-the-repository-td7518033 .html | Но если у вас есть пользователи, которые «могут игнорировать предупреждения от git», подмодули могут быть не для вас, поскольку для этого требуется дисциплина, а также для обновления. – drRobertz