Git: Установить пульт только для получения? - PullRequest
109 голосов
/ 26 сентября 2011

Когда я запускаю git remote -v в одном из моих репозиториев Git, для которого настроен удаленный (-ые) пульт (-ы), я вижу, что каждый удаленный имеет спецификации выборки и отправки:

$ git remote -v
<remote-name> ssh://host/path/to/repo (fetch)
<remote-name> ssh://host/path/to/repo (push)

Для удаленных, которые указывают наравноправным разработчикам нет необходимости выдвигать, и Git в любом случае откажется выдвигать в не обнаженное хранилище.Есть ли способ настроить эти пульты как «только для получения» без использования push-адреса или возможностей?

Ответы [ 4 ]

160 голосов
/ 26 сентября 2011

Я не думаю, что вы можете удалить push-URL, вы можете только переопределить , чтобы он был чем-то отличным от pull-URL.Поэтому я думаю, что самое близкое, что вы получите, будет примерно таким:

$ git remote set-url --push origin no-pushing
$ git push
fatal: 'no-pushing' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Вы устанавливаете push-URL на no-pushing, что, если у вас нет папки с тем же именемв вашем рабочем каталоге, git не сможет найти.Вы фактически заставляете git использовать местоположение, которое не существует.

8 голосов
/ 16 ноября 2017

Помимо изменения push-URL-адреса на что-то недопустимое (например, git remote set-url --push origin DISABLED), можно также использовать хук pre-push.

Один быстрый способ остановить git push - использовать символическую ссылку /usr/bin/falseбыть крючком:

$ ln -s /usr/bin/false .git/hooks/pre-push
$ git push
error: failed to push some refs to '...'

Использование крючка позволяет более тонко контролировать толчки, если это желательно.См. .git/hooks/pre-push.sample для примера того, как предотвратить принудительное выполнение коммитов.

4 голосов
/ 04 сентября 2014

Общее утверждение «Git откажется отправлять в не-пустое хранилище» не соответствует действительности.Git откажется отправлять в удаленный репозиторий без поддержки только в том случае, если вы пытаетесь отправить изменения в той же ветви, что и извлеченный рабочий каталог удаленного репозитория.

Этот ответ дает простое объяснение:1003 *https://stackoverflow.com/a/2933656/1866402

(я добавляю это как ответ, потому что у меня пока недостаточно репутации, чтобы добавлять комментарии)

0 голосов
/ 05 апреля 2017

Если у вас есть контроль над хранилищем, вы можете достичь этого, используя разрешения.Пользователь, который выбирает хранилище, не должен иметь разрешения на запись в главном хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...