Pergunta

Eu tenho meu repo @ github. Eu trabalhei em casa e o empurrei para o Github. Envolveu alguma exclusão de arquivos e diretórios. Agora estou na minha caixa de trabalho, que tinha uma cópia do código antes de excluir os arquivos e diretórios.

Eu emiti o seguinte:

git remote update
git checkout HEAD
git pull origin HEAD

Ele excluiu todos os arquivos que deveria ter, mas não os diretórios em que os arquivos estavam.

Duas questões:

  1. Por que não removeu os diretórios?
  2. Existe um comando git que eu possa emitir no estado atual para removê -los?
Foi útil?

Solução

O Git não rastreia os diretórios, portanto, não remove os que ficam vazios como resultado de uma mesclagem ou outra alteração. No entanto, você pode usar git clean -fd para remover diretórios não rastreados (o -fd Bandeira significa fRemoção de orque de arquivos não rastreados e diritorias).

Outras dicas

Como parte da maioria das operações que alteram a árvore de trabalho (puxar, mesclar, fazer checkout etc.) GIT removerá quaisquer diretórios que sejam vazios por essa operação (ou seja, removeu o último arquivo).

O Git não removerá nenhum diretório que não esteja completamente vazio; portanto, se você esconde arquivos escondidos ou ignorados, apenas porque o git remove o último monitorados O arquivo desse diretório não significa necessariamente que o GIT poderá remover esse diretório. O Git não considera que essa seja uma condição de erro, então não reclamará disso.

O Git não rastreia diretórios, arquivos (com seu caminho). Git cria todos os diretórios para esses caminhos, se eles ainda não existirem (legal!), No entanto não Exclua -os se todos os arquivos contidos em um caminho forem movidos ou excluídos (não é legal ☹ ... mas há razões).

Solução (Depois de puxar / avançar / fundido):

git stash --include-untracked
git clean -fd
git stash pop

Se você não o fizer stash antes da clean, você perderá todos os seus arquivos não rastreados (irreversivelmente).

Nota: Como isso também limpa todos os arquivos ignorados, pode ser necessário executar alguns scripts de compilação novamente para recriar os metadados do projeto (Ex: ./gradlew eclipse). Isso também exclui diretórios vazios e que nunca fizeram parte dos caminhos de arquivos Git.

Git não rastreia os diretórios atualmente (veja Git Wiki), Ou seja, você não pode adicionar diretórios vazios nem remover os diretórios que acabam vazios. (EDITAR: Obrigado, Manni, eu estava errado! Você não pode adicionar diretórios vazios, mas git vai remover Os diretórios que ficam vazios porque seu conteúdo rastreado foi excluído.)

Quanto ao comando para remover os diretórios vazios: isso depende do seu sistema operacional.

Para Linux que você poderia usar, por exemplo,

find -depth -type d -empty -exec rmdir {} \;

No entanto, isso vai remover tudo Diretórios vazios!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top