Ho 2 directory sul mio repository GitHub. Vorrei cancellarne uno. Come potrei farlo senza eliminare e ricreare l'intero repository?
Ho 2 directory sul mio repository GitHub. Vorrei cancellarne uno. Come potrei farlo senza eliminare e ricreare l'intero repository?
Risposte:
Puoi controllare "master" con entrambe le directory;
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)
Come menzionato nei commenti, ciò che di solito si desidera fare è rimuovere questa directory da git ma non eliminarla completamente dal filesystem (locale)
In tal caso utilizzare:
git rm -r --cached myFolder
git rm -r myFolder
ha funzionato, ma ha anche eliminato tutto dalla directory "MyFolder". Ho dovuto ripristinare tutto nella directory "MyFolder" e quindi eseguire il commit.
git rm -r --cached myFolder
git rm -r --cached directory/
rimuove solo da git monitorato, ma la struttura del repository rimane.
I passaggi per rimuovere la directory
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
I passaggi per ignorare quella cartella nei prossimi commit
Per ignorare quella cartella dai prossimi commit, crea un file nella radice chiamato .gitignore e inseriscici il nome. Puoi metterne quanti ne vuoi
Il file .gitignore sarà simile a questo
/FolderName
Se, per qualche motivo, ciò che Karmakaze ha detto non funziona, puoi provare a eliminare la directory che desideri utilizzare o con il browser del tuo file system (ad es. In Esplora file di Windows). Dopo aver eliminato la directory, immettere il comando:
git add -A
e quindi
git commit -m 'deleting directory'
e quindi
git push origin master
.
Puoi provare questo:
git rm -rf <directory_name>
Forza la cancellazione della directory.
Se rimuovi i file nella directory (con git rm
come spiegano le altre risposte), la directory non esiste più per quanto riguarda git. Non è possibile eseguire il commit di una directory vuota, né è possibile rimuoverne una.
Questo è diverso dalla sovversione in cui devi esplicitamente svn rm emptyfolder/
, ed è per inciso il motivo man
per cui la pagina per git si definisce "lo stupido tracker di contenuti"
Una risposta su "Come aggiungere una directory vuota a un repository git" si collega alle FAQ su questo argomento :
Attualmente la progettazione dell'indice git (area di gestione temporanea) consente solo di elencare i file e nessuno abbastanza competente da apportare la modifica per consentire alle directory vuote di occuparsi di questa situazione abbastanza da rimediare.
Le directory vengono aggiunte automaticamente quando si aggiungono file al loro interno. Cioè, le directory non devono mai essere aggiunte al repository e non vengono tracciate da sole.
Puoi dire "
git add <dir>
" e aggiungerà i file lì dentro.Se hai davvero bisogno di una directory per i checkout, devi creare un file al suo interno. .gitignore funziona bene per questo scopo; puoi lasciarlo vuoto o inserire i nomi dei file che ti aspetti di apparire nella directory.
Avevo già eseguito il commit della cartella in precedenza e desidero rimuovere anche la directory nella cronologia.
Ho fatto quanto segue:
Aggiungi cartella a .gitignore
:
echo Folder_Name/ >> .gitignore
Rimuovi da tutti i commit:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
rimuovere i ref dai vecchi commit:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
Assicurarsi che tutti i vecchi riferimenti siano stati completamente rimossi
rm -Rf .git/logs .git/refs/original
Eseguire una garbage collection
git gc --prune=all --aggressive
spingere le modifiche al repository online:
git push
Hai finito qui.
Ma puoi fare quanto segue per inviare tutte le modifiche a tutti i rami con: Ma fai attenzione con questo comando!
git push origin --all --force
git push origin --tags --force
Successivamente la cartella è stata rimossa da git, ma non è stata eliminata dal disco locale.
per eliminare le cartelle vuote
volevo cancellare una directory vuota (cartella) che ho creato, git non può cancellarla, dopo alcune ricerche ho imparato che Git non tiene traccia delle directory vuote. Se hai una directory vuota nell'albero di lavoro, devi semplicemente rimuoverla
rm -r folderName
Non è necessario coinvolgere Git.
Vai alla tua directory git quindi digita il seguente comando: rm -rf < Nome directory >
Dopo aver eliminato la directory, esegui il commit delle modifiche tramite: git commit -m "Il tuo messaggio di commit"
Quindi invia semplicemente le modifiche sulla directory GIT remota: git push origin < nome filiale >
È possibile utilizzare Attlasian Source Tree (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Basta selezionare i file dall'albero e premere il pulsante "Rimuovi" in alto. I file verranno eliminati dal repository locale e dal database git locale. Quindi Commit, quindi premere.
Uno dei miei colleghi ha suggerito BFG Repo-Cleaner che ritengo potente. Non solo elimina i dati indesiderati, ma pulisce anche il repository da qualsiasi informazione di commit correlata.
Per aggiungere una nuova directory:
mkdir <YOUR-DIRECTORY>
Ma ora Git non è a conoscenza di questa nuova directory, perché Git tiene traccia dei file e non delle directory DIRECTORY
git status
Git non sarà a conoscenza della modifica che abbiamo apportato, quindi aggiungiamo il .keep
file nascosto per rendere Git consapevole di questa nuova modifica.
touch /YOUR-directory/.keep
Ora, se premi git status
Git, sarai consapevole delle modifiche.
E se vuoi eliminare la directory, dovresti usare questo comando.
rm -r <YOUR-DIRECTORY>
E se hai controllato usando git status
, vedrai che la directory è stata rimossa.
Una combinazione delle 2 risposte ha funzionato per me
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
se mostra ancora qualche avviso, rimuovi i file manualmente
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push