Este é o mesmo no shell como nas outras gramáticas que você mencionou. Uma única string entre aspas será tratada como "string literal" (por assim dizer).
A diferença entre git add '*.txt'
e git add *.txt
é quem está fazendo a correspondência do padrão com nomes de arquivos.
No caso de git add '*.txt'
, git
está fazendo a correspondência de padrões. Como o shell não expandirá a string literal '*.txt'
, git add
será chamado com um único argumento, *.txt
. git
, em seguida, faz a correspondência com os nomes de arquivos disponíveis em todo o repositório (porque ... git
).
No caso de git add *.txt
, o shell faz a correspondência do nome do arquivo e passará uma lista de nomes de arquivos correspondentes do diretório atual para git add
. Note que se não houver nomes que correspondam ao padrão dado, o shell irá (geralmente 1 ) passar o padrão para git add
unexpanded. Se isso acontecer, o resultado será o mesmo que se o padrão tivesse sido citado.
1 Geralmente, mas veja, e. a opção failglob
shell em bash
. Veja também os comentários a esta resposta.
Quando git add
obtiver um nome de arquivo padrão , ele adicionará não apenas os arquivos correspondentes no diretório atual, mas adicionará todos os arquivos correspondentes em todo o repositório (isto é, incluindo quaisquer subdiretórios). É por isso que o texto no canto inferior direito diz
Wildcards:
We need quotes so that Git will receive the wildcard before our shell can interfere with it. Without quotes our shell will only execute the wildcard search within the current directory. Git will receive the list of files the shell found instead of the wildcard and it will not be able to add the files inside of the octofamily directory.