Existe um comando `git cp` que pode copiar apenas arquivos rastreados, como` svn cp`?

2

Diferente do Subversion, o git não tem cpcomando. Para arquivos, este não é um problema: se eu quiser copiar um arquivo apara b, eu só pode fazer:

cp -a a b
git add b

No entanto, digamos que quero copiar um diretório dpara dar outro nome e. Eu ainda posso fazer a mesma coisa. No entanto, dpode conter arquivos que não são rastreados pelo git, por exemplo, binários compilados, etc. Nesse contexto, não quero fazer o acima, porque não quero que o git rastreie esses arquivos adicionais.

Com o Subversion, eu posso fazer svn cp, e ele apenas copiará e adicionará os arquivos rastreados pelo Subversion. Como posso fazer isso com o git?

a3nm
fonte

Respostas:

0

A solução certa é simplesmente garantir que todos os arquivos não rastreados sejam ignorados .gitignore.

Nesse caso, quando você copia o diretório cp -Ra d ee o executa git add e, o git será inteligente o suficiente para evitar adicionar os arquivos que ele ignora.

a3nm
fonte
-2
  1. Encontre o hash da árvore de "d" (git ls-tree HEAD d)
  2. git read-tree -u --prefixo = e hash da árvore

Feito!

git read-treepermite substituir seu índice ou (como neste caso) uma subárvore dele, por qualquer objeto de árvore que você conheça o hash. Depois, faz -ucheck-out da subárvore do índice (como se você tivesse feito git checkout -- e). Para obter mais informações sobre objetos em árvore e o índice, consulte o livro Pro Git .

user981942
fonte
Você pode explicar como isso funciona? Por favor, não responda nos comentários; edite  sua resposta para torná-la mais clara e completa.
Scott