Quelle est la signification des doubles tirets avant le nom de fichier dans cette commande git?
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
Sont-ils obligatoires? Est-ce équivalent à
git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
git
git-checkout
mottalrd
la source
la source
Réponses:
Supposons que j'ai un fichier nommé
path/to/file.txt
dans mon référentiel Git et que je souhaite annuler les modifications.Supposons maintenant que le fichier soit nommé
master
...Oups! Cela a plutôt changé de branche. Le
--
sépare l'arborescence que vous souhaitez extraire des fichiers que vous souhaitez extraire.Cela nous aide également si certains monstres ajoutent un fichier nommé
-f
à notre référentiel:Ceci est documenté dans git-checkout: Argument Disambiguation .
la source
--
peut être utilisé pour séparer les options des autres arguments, vous le verrez donc sur les commandes commecp
etmv
(qui ne font pas partie de Bash).checkout
documentation de la commande?checkout
commande, mais nulle part la documentation n'explique ce qu'il fait ou pourquoi il est utilisé ... ce qui m'a finalement amené ici.--
. En tant que personne qui ne vient pas d'un environnement Linux, ce n'est pas évident. Pour moi, cela semblait être une syntaxe spécifique à git, sans description de sa fonction. Je pense qu'il serait préférable d'avoir une courte description comme les autres options, ou au moins un lien vers une page de manuel Linux .Le double tiret «-» signifie «drapeaux de fin de ligne de commande», c'est-à-dire qu'il indique à la commande précédente de ne pas essayer d'analyser ce qui vient après les options de ligne de commande.
la source
git
cela signifie plus que cela, car cela signifie également que l'argument après--
ne peut pas être un nom de branche, et par implication l'argument avant--
ne peut pas être un chemin de fichier.Notez que vous n'auriez pas besoin, puisque Git 2.5 (Q2 2015) d'un '
--
' si votre argument inclut un caractère générique (*
)Une heuristique pour aider la "
git <cmd> <revs> <pathspec>
" convention de ligne de commande à capturer les chemins mal typés est de s'assurer que tous les paramètres non rev dans la dernière partie de la ligne de commande sont les noms des fichiers dans l'arborescence de travail, mais cela signifie que "git grep $str -- \*.c
" doit toujours être sans ambiguïté avec "--
", car personne sain d'esprit ne créera un fichier dont le nom est littéralement astérisque-point-voir.Git 2.5 perd l'heuristique pour déclarer qu'avec une chaîne générique, l'utilisateur voulait probablement nous donner une spécification de chemin .
Voir commit 28fcc0b (02 mai 2015) par Duy Nguyen (
nguyenlocduy
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 949d167 , 19 mai 2015)Avec Git 2.26 (Q1 2020), la logique de désambiguïsation pour distinguer les révisions et les pathspec a été modifiée de sorte que les caractères spéciaux glob échappés de barre oblique inverse ne comptent pas dans la règle "les caractères génériques sont des pathspec".
Voir commit 39e21c6 (25 janvier 2020) de Jeff King (
peff
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 341f8a6 , 12 fév 2020)( DWIM: Faites ce que je veux dire )
la source