Git: Mettre en place une télécommande fetch uniquement?

Lorsque git remote -v dans l’un de mes référentiels Git avec une ou plusieurs télécommande (s) configurée (s), je constate que chaque télécommande possède à la fois des spécifications d’extraction et d’envoi:

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

Pour les télécommandes qui pointent vers des développeurs homologues, il n’y a pas besoin 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 comme étant uniquement “récupérables” sans adresse ou fonctionnalités Push?

Je ne pense pas que vous pouvez supprimer l’URL push, vous ne pouvez le remplacer que pour l’URL d’extraction. Donc, je pense que le plus proche de vous est quelque chose comme ça:

 $ 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 push sur push no-pushing , ce qui, tant que vous n’avez pas un dossier du même nom dans votre répertoire de travail, git ne sera pas en mesure de localiser. Vous obligez essentiellement git à utiliser un emplacement qui n’existe pas.

L’énoncé général “Git refusera de pousser vers un référentiel non nu” n’est pas vrai. Git refusera uniquement de transférer vers un référentiel distant non-nu si vous tentez de pousser des modifications se trouvant sur la même twig 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 assez de réputation pour append des commentaires)

En plus de changer l’URL push en quelque chose d’invalide (par exemple, git remote set-url --push origin DISABLED ), on peut également utiliser le pre-push hook.

Un moyen rapide d’arrêter git push consiste à créer un lien symbolique entre /usr/bin/false :

 $ 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 un exemple d’ .git/hooks/pre-push.sample de la .git/hooks/pre-push.sample des travaux en cours.

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