Есть ли способ запустить git в режиме только для чтения? - PullRequest
1 голос
/ 16 декабря 2010

Я пишу скрипт для запуска таких вещей, как git status, в каждом из подкаталогов текущего каталога, чтобы я мог быстро получить информацию о нескольких репозиториях git.Однако я хочу предотвратить любые команды, которые изменяют репо.Я бы не хотел совершать десять репо одновременно.Я не могу просто использовать белый список подкоманд git, потому что мне может потребоваться запустить git branch -a, чтобы увидеть ветви в каждом репо, а не git branch new-branch-name, чтобы создать новую ветку в каждом репо.

Так есть ли способ запустить git, чтобы он мог прервать работу вместо внесения каких-либо изменений в репозиторий, но нормально работать при выполнении команд только для чтения?

Редактировать: Что я хочу сделатьэто сделать команду git-subdirs, которая работает следующим образом: когда я набираю git subdirs COMMAND ARGS, я хочу сделать что-то вроде for dir in */; do cd $dir && git COMMAND ARGS && cd ..; done (только с дополнительной проверкой ошибок).За исключением того, что если git COMMAND ARGS будет каким-либо образом изменять репо, я не хочу этого делать, потому что крайне маловероятно, что я захочу внести одно и то же изменение во многие разные репо.

Ответы [ 4 ]

4 голосов
/ 16 декабря 2010

Это немного глупо, но вы можете просто запустить свой скрипт как пользователь, у которого нет прав на запись в хранилище.Чтобы не вводить пароль, вы можете использовать пару ключей ssh ​​и ssh на своем компьютере в качестве этого пользователя.(или, может быть, настроить его через sudoers?)

В отличие от белого списка, это гарантированно не будет иметь никаких случайных дыр или чрезмерных ограничений.Для этого не требуется фактически изменять разрешения репо, только полномочия пользователя, действующего на него.И это не требует каких-либо дополнительных настроек, как это делает git-daemon.

(Полагаю, я должен отметить, что нет встроенной опции «только для чтения» для передачи в git. Он просто пытается что-то сделатьи, если у него есть разрешение, делает это.)

1 голос
/ 16 декабря 2010

Почему бы не запретить запись в каталог репозитория?

$ chmod -R -w repo.git
0 голосов
/ 16 декабря 2010

Я реализовал это с помощью unionfs-fuse. Это абсолютно непереносимо, но у меня работает в Ubuntu. Попробуйте это с git subdirs status в каталоге, который содержит все ваши репозитории git.

Вы можете получить его у Github: https://github.com/DarwinAwardWinner/git-custom-commands

0 голосов
/ 16 декабря 2010

Возможно, вы действительно можете использовать белый список команд.Например.вместо git-status используйте git-diff-files и git-branch, вы можете использовать git-show-ref или git-for-each-ref.Обязательно ознакомьтесь с командами низкого уровня (сантехника).Скорее всего, вы найдете простую целенаправленную команду низкого уровня для всех ваших потребностей сценариев.

...