Eu tenho 2 diretórios no meu repositório GitHub. Eu gostaria de excluir um deles. Como eu poderia fazer isso sem excluir e recriar todo o repositório?
Eu tenho 2 diretórios no meu repositório GitHub. Eu gostaria de excluir um deles. Como eu poderia fazer isso sem excluir e recriar todo o repositório?
Respostas:
Você pode fazer o checkout 'master' com os dois diretórios;
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
Conforme mencionado nos comentários, o que você normalmente quer fazer é remover este diretório do git, mas não excluí-lo totalmente do sistema de arquivos (local)
Nesse caso, use:
git rm -r --cached myFolder
git rm -r myFolder
, funcionou, mas também excluiu tudo do diretório "MyFolder". Teve que reverter tudo no diretório "MyFolder" e depois confirmar.
git rm -r --cached myFolder
git rm -r --cached directory/
remove apenas do git tracked, mas a estrutura do repositório permanece.
Etapas para remover o diretório
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
Etapas para ignorar essa pasta nas próximas confirmações
Para ignorar essa pasta das próximas confirmações, crie um arquivo na raiz chamado .gitignore e coloque o nome dessa pasta nela. Você pode colocar quantas quiser
O arquivo .gitignore ficará assim
/FolderName
Se, por alguma razão, o que o karmakaze disse não funcionar, você pode tentar excluir o diretório que deseja usar ou com o navegador do sistema de arquivos (por exemplo, no Windows File Explorer). Após excluir o diretório, emitindo o comando:
git add -A
e depois
git commit -m 'deleting directory'
e depois
git push origin master
.
Você pode tentar isso:
git rm -rf <directory_name>
Isso forçará a exclusão do diretório.
Se você remover os arquivos no diretório (com git rm
as outras respostas explicadas), o diretório não existirá mais no que diz respeito ao git. Você não pode confirmar um diretório vazio nem remover um.
Isso é diferente da subversão em que você precisa explicitamente svn rm emptyfolder/
, e é por isso que a man
página do git se descreve como "o estúpido rastreador de conteúdo"
Uma resposta em "Como faço para adicionar um diretório vazio a um repositório git" às perguntas frequentes sobre este assunto :
Atualmente, o design do índice git (área de preparação) permite apenas a listagem de arquivos, e ninguém competente o suficiente para fazer a alteração para permitir diretórios vazios se preocupou o suficiente com essa situação para remediá-la.
Os diretórios são adicionados automaticamente ao adicionar arquivos dentro deles. Ou seja, os diretórios nunca precisam ser adicionados ao repositório e não são rastreados por si mesmos.
Você pode dizer "
git add <dir>
" e ele adicionará arquivos lá.Se você realmente precisa que um diretório exista nos caixas, deve criar um arquivo nele. .gitignore funciona bem para esse fim; você pode deixá-lo vazio ou preencher os nomes dos arquivos que você espera que apareçam no diretório
Eu já havia confirmado a pasta antes e também quero remover o diretório no histórico.
Eu fiz o seguinte:
Adicionar pasta a .gitignore
:
echo Folder_Name/ >> .gitignore
Remova de todas as confirmações:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
remova os árbitros dos antigos commit:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
Verifique se todas as referências antigas foram totalmente removidas
rm -Rf .git/logs .git/refs/original
Executar uma coleta de lixo
git gc --prune=all --aggressive
envie as alterações para o repositório online:
git push
Você terminou aqui.
Mas você pode fazer o seguinte para enviar todas as alterações para todos os ramos com: Mas tenha cuidado com este comando!
git push origin --all --force
git push origin --tags --force
Depois disso, a pasta foi removida do git, mas não foi excluída do disco local.
para excluir pastas vazias
Eu queria excluir um diretório vazio (pasta) que criei, o git não pode excluí-lo, depois de algumas pesquisas, aprendi que o Git não controla diretórios vazios. Se você tem um diretório vazio em sua árvore de trabalho, basta removê-lo com
rm -r folderName
Não há necessidade de envolver o Git.
Você pode excluir a pasta localmente e pressionar, como a seguir:
git rm -r folder_name
git commit -m "your commit"
git push origin master
Você pode usar a Árvore de origem atlasiana (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Basta selecionar arquivos da árvore e pressionar o botão "Remover" na parte superior. Os arquivos serão excluídos do repositório local e do banco de dados git local. Em seguida, confirme e empurre.
Um dos meus colegas sugeriu o BFG Repo-Cleaner, que eu acho poderoso. Não é apenas excluir dados indesejados, mas também limpar seu repositório de qualquer informação de confirmação relacionada.
Para adicionar um novo diretório:
mkdir <YOUR-DIRECTORY>
Mas agora o Git não está ciente desse novo diretório, porque o Git mantém o controle de arquivos e não de diretórios.
git status
O Git não estará ciente das alterações que fizemos, por isso, adicionamos um .keep
arquivo oculto para que o Git fique ciente dessa nova alteração.
touch /YOUR-directory/.keep
Agora, se você pressionar git status
Git, estará ciente das alterações.
E se você deseja excluir o diretório, você deve usar este comando.
rm -r <YOUR-DIRECTORY>
E se você verificou usando git status
, verá que o diretório foi removido.
Uma combinação das 2 respostas funcionou para mim
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
se ainda mostrar algum aviso, remova os arquivos manualmente
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push