Molte lune fa ho aggiunto una sottostruttura al mio repository git
. Questa sottostruttura comprendeva diverse cartelle e file. Ho aggiunto la sottostruttura invece di creare un sottomodulo (come raccomandato). Ora capisco che voglio solo uno dei file nella sottostruttura e niente del resto. Ancora peggio, quando altri clone
mio repository, ciò che ottengono non è ciò che è previsto, c'è qualche conflitto con la sottostruttura e l'altro codice che ho creato.Come rimuovere la sottostruttura di git precedentemente aggiunta e la sua cronologia
posso ottenere cavalcata dei file/cartelle con
git rm subtree–folder1 subtree_folder2 subtree_files.*
tuttavia, sono ancora a sinistra con una storia lunga commettere Dalla sottostruttura.
Ho eseguito una discreta quantità di sviluppo da quando ho aggiunto la sottostruttura e non posso perdere la cronologia dei commit che ho generato.
In breve questo è quello che vorrei:
- Rimuovere tutti i file sottostruttura/cartelle.
- Dimentica la cronologia di tutti gli elementi della sottostruttura.
- Rimasto solo con il mio codice e la mia cronologia.
È possibile?
PS. Una possibile complicazione è che ho spostato il singolo file di intestazione che volevo conservare dalla sottostruttura in qualche cartella del mio codice. Spero che questo non mi impedisca di dimenticare la storia del sottotenoso.
Un tentativo
Dopo un checkout fresco dal server remoto Ho il seguente:
$ ls
.git CMakeLists.txt Read.cpp logging.conf
.gitignore ENDF6 TestData src
.sparse-checkout LICENCE doc test
.travis.yml README.md include tools
Dove .gitignore
ha solo: build/ debug/
quando provo il comando come suggerito non ho una risposta molto felice:
$ git filter-branch --index-filter 'git rm --cached -rf test tools src doc LICENCE README.md .travis.yml' HEAD
Rewrite 2fec85e41e40ae18efd1b130f55b14166a422c7f (1/1701)fatal: pathspec 'test' did not match any files
index filter failed: git rm --cached -rf test tools src doc LICENCE README.md .travis.yml
Non so perché dice che ha un problema con test
quando è chiaramente lì. Sono sconcertato.
Hai provato semplicemente a utilizzare 'git rm' per rimuovere la sottostruttura? –
@hunch_hunch L'ho fatto così come i comandi qui: http://stackoverflow.com/questions/15890047/how-to-remove-history-of-deleted-git-subtree-folder ma ho ancora tutta la storia di il sottoalbero Aiuto! – jlconlin
Stai per riscrivere la cronologia del tuo repository tramite rebase o filter-branch? –