web-dev-qa-db-fra.com

Git: Configurer une télécommande à extraction uniquement?

Quand je lance git remote -v dans l'un de mes référentiels Git sur lesquels une ou des télécommandes sont configurées, je constate que chaque télécommande a à la fois des spécifications d'extraction et de push:

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

Pour les télécommandes qui pointent vers des développeurs pairs, il n'est pas nécessaire de pousser, et Git refusera de toute façon de pousser vers un référentiel non nu. Existe-t-il un moyen de configurer ces télécommandes en "lecture seule" sans adresse ou capacités Push?

111
mtbkrdave

Je ne pense pas que vous puissiez supprimer l'URL Push, vous pouvez seulement remplacer que ce soit autre chose que l'URL pull. Je pense donc que le plus proche que vous obtiendrez est quelque chose comme ceci:

$ 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

Vous définissez l'URL de transmission sur no-pushing, que, tant que vous n'avez pas de dossier du même nom dans votre répertoire de travail, git ne pourra pas le localiser. Vous forcez essentiellement git à utiliser un emplacement qui n'existe pas.

163
Daniel Brockman

Outre le fait de remplacer l'URL de push par un élément non valide (par exemple, git remote set-url --Push Origin DISABLED), on peut aussi utiliser le pre-Push crochet.

Un moyen rapide d'arrêter git Push est un lien symbolique /usr/bin/false pour être le crochet:

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

L'utilisation d'un crochet permet un contrôle plus fin des poussées si cela est souhaitable. Voir .git/hooks/pre-Push.sample pour savoir comment empêcher l'envoi de validations de travaux en cours.

8
Rodolfo Carvalho

L'énoncé général "Git refusera de pousser vers un référentiel non nu" n'est pas vrai. Git refusera de pousser vers un référentiel distant non nu uniquement si vous essayez de pousser des modifications qui se trouvent sur la même branche que le répertoire de travail extrait du référentiel distant.

Cette réponse donne une explication simple: https://stackoverflow.com/a/2933656/1866402

(J'ajoute ceci comme réponse car je n'ai pas encore assez de réputation pour ajouter des commentaires)

4
pkeller

Si vous contrôlez le référentiel, vous pouvez y parvenir en utilisant des autorisations. L'utilisateur qui récupère le référentiel ne doit pas avoir d'autorisations d'écriture sur le référentiel maître.

0
Abhilash