Existe-t-il un moyen de configurer le référentiel Git hôte de sorte que tout ce qui est git pull
fait à partir de ses clones (locaux) l'utilise --rebase
par défaut? En cherchant sur Stack Overflow, j'ai appris branch.autosetuprebase
, mais il doit être configuré individuellement par clone.
Mon flux de projet est configuré de telle sorte que nous effectuons pull
une develop
branche avant d'y merge
insérer une fonctionnalité. Cela pull
utilise presque toujours --rebase
, donc j'essaie de déterminer si cela peut être la valeur par défaut.
Réponses:
Il existe maintenant 3 niveaux de configuration différents pour le comportement d'extraction par défaut. Du plus général au plus fin, ils sont:
1.
pull.rebase
Définir ceci sur
true
signifie que celagit pull
équivaut toujours àgit pull --rebase
(sauf s'ilbranch.<branchname>.rebase
est explicitement défini surfalse
). Cela peut également être défini par référentiel ou globalement.2.
branch.autosetuprebase
Le paramétrer sur
always
signifie que chaque fois qu'une branche de suivi est créée, une entrée de configuration comme celle ci-dessous sera créée pour elle. Pour un contrôle plus fin, cela peut également être défini surnever
,local
ouremote
et peut être défini par référentiel ou globalement. Voirgit config --help
pour plus de détails.3.
branch.<branchname>.rebase
Définir ceci sur
true
signifie que cette branche particulière tirera toujours de son amont via le rebasage, sauf si ellegit pull --no-rebase
est utilisée explicitement.Conclusion
Ainsi, même si vous ne pouvez pas modifier le comportement par défaut pour tous les futurs clones d'un référentiel, vous pouvez modifier la valeur par défaut pour tous les référentiels de l'utilisateur actuel (existants et futurs) via
git config --global pull.rebase true
.la source
~/.gitconfig
, ce qui signifie que chaque développeur qui clone le référentiel hôte devra exécuter la commande. Ne pas se plaindre de votre solution. Il est bon, je veux juste confirmer que j'ai bien compris votre point.Que diriez-vous
Cela dira à git de toujours tirer avec rebase.
la source
--bool
, il est inutileLa réponse est non.
Il n'y a pas de moyen de configurer un référentiel distant afin que tous ceux qui le clonent aient le comportement par défaut de
git pull
changé.Vous pouvez cependant configurer un hook côté serveur qui vérifie que personne ne pousse les validations de fusion ( quelque chose comme ça , peut-être).
Il existe également des options de configuration qui pourraient vous intéresser. Tous les développeurs qui clonent à partir du référentiel distant devront le définir eux-mêmes manuellement.
1. Option
branch.<name>.rebase
Vous pouvez configurer une branche locale pour qu'elle utilise toujours
--rebase
, comme ceci, en remplaçant<name>
par un nom de branche:Après avoir exécuté ceci
master
, lamaster
section.git/config
ressemblait à ceci:2. Option
branch.autosetuprebase
Exécuter cette commande de configuration précédente pour chaque branche Git peut être un problème, vous pouvez donc configurer Git pour le configurer automatiquement pour chaque nouvelle branche:
(Vous pouvez également spécifier
never
,remote
etlocal
, voirman git-config
pour plus de détails.)Sans cette
--global
option, la configuration est enregistrée dans.git/config
et seul le référentiel actuel est affecté. Avec--global
, la configuration est enregistrée dans~/.gitconfig
et chaque référentiel non configuré est affecté.Cette option n'affecte pas les branches déjà existantes.
3. Option
pull.rebase
(Vous pouvez également lui donner l'
--global
option.)Si cette option est vraie, l'exécution
git pull
équivaut àgit pull --rebase
, sauf si ellebranch.<name>.rebase
a été définie surfalse
.la source
Cela fait de l'
--rebase
option la valeur par défaut lors de l'émission d'ungit pull
sur une branche donnée.@Flimm, j'avais besoin d'ajouter
true
pour que votre première option fonctionne.La syntaxe correcte est donc:
Pour exécuter cette commande sur la
develop
branche:Et maintenant, la
develop
section de.git/config
ressemble à ceci:la source
Il n'existe actuellement aucun moyen de définir la stratégie par défaut pour un référentiel.
Si vous le voulez pour vous-même et que vous utilisez au moins git 1.7.9, vous pouvez définir globalement la
pull.rebase
configuration comme suit:Mais vous devrez le faire sur chaque machine. Une option pourrait être de configurer le modèle / squelette d'accueil de l'utilisateur par défaut avec cette option. Les utilisateurs peuvent toutefois modifier cette option.
Si vous ne voulez pas de fusions, vous pouvez définir un hook côté serveur pour rejeter les poussées avec des fusions.
Pour votre information, il s'agit de la documentation source de pull.rebase:
la source