Digamos que eu tenho um diretório /X/Y
, que é um repositório git. É possível, de alguma forma, chamar um comando como git pull
de dentro /X
, mas visando o /X/Y
diretório?
Edição: Eu acho que eu estava pensando especificamente: é possível fazer isso usando o comando a git, mas sem ter que mudar de diretório?
NOTA: Eu aceitei resposta de VonC como é muito mais elegante do que as opções anteriores. Para pessoas executando o Git com mais de 1.8.5, consulte a resposta do bstpierre abaixo .
Respostas:
Iniciando o git 1.8.5 (Q4 2013) , você poderá "usar um comando Git, mas sem precisar alterar os diretórios".
Veja commit 44e1e4 de Nazri Ramliy :
Desde o Git 2.3.4 (março de 2015), e o commit 6a536e2 por Karthik Nayak (
KarthikNayak
) ,git
"git -C '<path>'
" será tratado como não-op quando<path>
estiver vazio.4 anos depois, o Git 2.23 (terceiro trimestre de 2019) documenta que '
git -C ""
' funciona e não altera o diretórioIsso significa que a documentação agora (finalmente) inclui:
Você pode ver
git -C
usado com o Git 2.26 (primeiro trimestre de 2020), como exemplo.Veja commit b441717 , commit 9291e63 , commit 5236fce , commit 10812c2 , commit 62d58cd , commit b87b02c , commit 9b92070 , commit 3595d10 , commit f511bc0 , commit f6041ab , commit f46c243 , commit 99c049b , commit 3738439 , commit 7717242 ( commit 2017) de Denton Liu (
Denton-L
) .(Mesclado por Junio C Hamano -
gitster
- no commit 381e8e9 , 05 de fevereiro de 2020)fonte
apt-get install software-properties-common python-software-properties
adicione o repositório gitadd-apt-repository ppa:git-core/ppa
. O último passo é a atualização git:apt-get update && apt-get upgrade
.Editar :
Existe um erro
git pull
ou você não pode fazer o que está tentando fazer com esse comando. No entanto, você pode fazê-lo com busca e mesclagem:Resposta original :
Supondo que você esteja executando o bash ou similar, é possível
(cd /X/Y; git pull)
.A página de manual do git especifica algumas variáveis (consulte "O Repositório do git") que parecem ajudar, mas não posso fazê-las funcionar corretamente (com o meu repositório em / tmp / ggg2):
Executando o comando abaixo enquanto meu cwd está / tmp atualiza esse repositório, mas o arquivo atualizado aparece em / tmp em vez da árvore de trabalho / tmp / ggg2:
Veja também esta resposta a uma pergunta semelhante , que demonstra os sinalizadores
--git-dir
e--work-tree
.fonte
.git
diretório.git --git-dir=/tmp/ggg2/.git --work-tree=/tmp/ggg2 pull
, recebo uma mensagem de erro. Mas se eu fizer issogit --git-dir=/tmp/ggg2/.git --work-tree=. pull
enquanto estiver no / tmp, ele colocará os arquivos atualizados no / tmp como deveria.--work-tree
agora--work-tree=/tmp/ggg2/
e--work-tree=/tmp/ggg2/.
como isso pode ser um problema de como está analisando o caminho.Você pode envolvê-lo em um script bash ou alias do git:
fonte
pushd/popd
par em vez decd/cd-
(cd xyz && git pull)
Este post é um pouco antigo, então poderia haver um erro e foi corrigido, mas eu fiz isso:
E funcionou. Levei um minuto para descobrir que ele queria o dotfile e o diretório pai (em uma configuração padrão, eles sempre são pai / filho, mas não em TODAS as configurações, portanto, eles precisam ser especificados explicitamente.
fonte
Como alguns de meus servidores estão em versões antigas do Ubuntu LTS, não consigo atualizar facilmente o git para a versão mais recente (que suporta a opção -C, conforme descrito em algumas respostas).
Esse truque funciona bem para mim, principalmente porque não tem o efeito colateral de outras respostas que o deixam em um diretório diferente de onde você começou.
Ou, fazendo isso como uma linha:
Tanto o Linux como o Windows possuem comandos pushd e popd.
fonte
Usando a combinação
pushd
,git pull
epopd
, podemos alcançar esta funcionalidade:Por exemplo:
fonte
Você pode escrever um script como este:
Você pode nomear algo como
gitpull
.Se você preferir, faça diretórios arbitrários em vez de
/X/Y
:Então você pode chamá-lo com
gitpull /X/Z
Lastly, você pode tentar encontrar repositórios. Eu tenho uma
~/git
pasta que contém repositórios, e você pode usá-lo para fazer um pull em todos eles.fonte
(cd /X/Y && git pull)
.Para alguém como eu que estava tentando fazer isso através de um comando drush (shell Drupal) em um servidor remoto, você não poderá usar a solução que requer o CD no diretório de trabalho:
Em vez disso, você precisa usar a solução que divide a atração em uma busca e mesclagem:
fonte
Esse pode ser um problema semelhante, mas você também pode simplesmente encadear seus comandos. por exemplo
Em uma linha
Ou via SSH.
fonte