por JoséQuintas » 07 Fev 2021 14:39
Deixar anotado aqui.
CUIDADO com esses comandos.
É pra reescrever todo histórico, fazendo modificações.
git filter-branch --tree-filter "rm -rf FONTES" --prune-empty
O comando acima é pra remover a pasta FONTES de todo histórico.
Ainda em andamento, vai mais uns 20 minutos até terminar, pra ver se deu certo.
git filter-branch --force --tree-filter "mv FONTES/INTEGRA integra || true"
O comando acima é pra mover a pasta FONTES/INTEGRA pra integra.
O true a mais é para os casos aonde der erro, pra considerar que deu certo mesmo assim.
É que se mover mas não existir dá erro e aborta tudo, com o true continua mesmo se não existir.
Mesmo caso, ainda em andamento, talvez mais 20 minutos pra terminar, pra ver se deu certo.
--tree-filter
--index-filter
Vi que tem essas duas opções, que são interessantes, dependendo do caso.
--index-filter faz pelos "commits", pelo histórico, acaba usando pasta temporária
--tree-filter faz na pasta oficial.
No caso de conflito, aparece lá pra resolver, e fica tudo com o conteúdo "da época".
Conflitos, depende do caso, pra ser fácil resolver ou não.
Tem o rebase que já mencionei antes também, que também pode ter conflitos.
Vamos a alguns casos:
- No manual: você remove uma pasta ou um fonte.
Todas as próximas atualizações que mexeram com essa pasta/esse fonte, vão acusar conflito, porque elas não vão poder mexer no que foi apagado.
Nesse caso é só acrescentar que continua excluÃdo desse commit.
Cuidado ao fazer isso com 3.500 atualizações, porque teria que corrigir um por um, até terminar, caso seja uma pasta muito atualizada.
Para esses casos, o filter-branch será uma melhor opção, porque faria automático com todos.
- sub-projetos
Temporariamente estou removendo isso.
O lado bom é ficar vinculado ao ponto exato do sub-projeto.
O lado ruim, é que ao reescrever histórico, esses pontos não podem ser alterados, o que causa aqueles desvios como uma versão paralela.
Continua tudo bem controlado, mas .... pode causar muita confusão ao olhar histórico.
Isso também acontece com forks... é uma coisa comum, e por isso não pode perder o controle, e precisam existir as "versões paralelas".
A prioridade no git/github é não perder fontes.
As versões paralelas são justamente pra não perder nada, até mesmo se alterar todo histórico e todas as alterações.
É bom lembrar disso, porque às vezes vai parecer que seu histórico está ficando doido, mas é porque na prática é você quem dá a palavra final sobre como manter o histórico após uma alteração: pode manter o controle paralelo ou pode sumir com ele de vez.
Não sei como funciona a cobrança do github num caso desses, pra conta particular, mas parece que o tamanho do controle não importa.
Parece que a cobrança é sobre resultados, e não sobre o projeto, por exemplo gerar e guardar pacotes prontos do projeto (o aplicativo gerado, por exemplo).
Mas fica aÃ, sobre o que pesquisar: filter-branch
pra quando quiser mudar toda a sua história de fontes/alterações.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"