Po filtro atšakos - trree filtro nuimkite refs / original / heads / master iš git repo?

Turėjau tą patį klausimą, kaip ir čia: naujas git saugykla šakniniame kataloge, kuriame esamas saugykla įdedama į antrinį katalogą

Šį atsakymą naudoju čia: Nauja git saugykla šakniniame kataloge, kad į esamą saugyklą būtų įtraukta į katalogą

Dabar gitk --all rodo dvi istorijas: vienas iš jų pasiekė aukščiausią tašką dabartiniame gitk --all , o kitas - original/refs/heads/master .

Nežinau, kokia yra antroji istorija, arba kaip ją pašalinti iš repo. Mano saugykloje nereikia dviejų istorijų.

Kaip atsikratyti jo?

Atkurti save:

 mkdir -p project-root/path/to/module cd project-root/path/to/module mkdir dir1 dir2 dir3 for dir in * ; do touch $dir/source-file-$dir.py ; done git init git add . git commit -m 'Initial commit' 

Dabar mes turime pradinę problemą su plakatu. Perkelkite „git“ saugyklos šaknį į projekto šaknį naudodami pirmiau pateiktą atsakymą:

 git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD rm -rf path cd ../../../ # Now PWD is project-root mv path/to/module/.git . git reset --hard 

Dabar peržiūrėkite mano dabartinę problemą:

 gitk --all  git show-ref 

Kaip atsikratyti refs/original/heads/master ir visos susijusios istorijos?

137
05 окт. nustatyti goofeedude 05 okt. 2011-10-05 01:38 '11 prie 1:38 2011-10-05 01:38
@ 3 atsakymai

refs/original/* egzistuoja kaip atsarginė kopija, jei sugadinote filtro šaką. Patikėkite, tai tikrai gera idėja.

Kai tik peržiūrėsite rezultatus ir esate tikri, kad turite tai, ko norite, galite pašalinti nuorodą:

 git update-ref -d refs/original/refs/heads/master 

arba jei tai padarėte su daugeliu nuorodų, ir norite ją visiškai ištrinti:

 git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d 

(Tai paimama tiesiai iš filtro šakos puslapio.)

Tai netaikoma jums, bet tiems, kurie jį gali rasti: jei sukuriate filtravimo šaką, kuri pašalina turinį, git reflog expire --expire=now --all didelę vietą diske, galite paleisti „ git reflog expire --expire=now --all ir „ git gc --prune=now prieš pasibaigiant jūsų reflogui ir pašalinkite nepanaudotus objektus. (Įspėjimas: visiškai, visiškai negrįžtamas. Būkite tikri prieš tai.)

240
05 окт. atsakymą pateikė Cascabel 05 okt. 2011-10-05 01:44 '11 prie 1:44 2011-10-05 01:44

Ir jei esate „Windows PowerShell“:

border=0
 git for-each-ref --format="%(refname)" refs/original/ | foreach-object -process { git update-ref -d $_ } 
6
13 янв. atsakymą pateikė Guilherme Duarte 13 sausis 2017-01-13 22:59 '17, 22:59 pm 2017-01-13 22:59

filter-branch saugo atsargines kopijas, todėl saugyklos turi išvalyti failus ir šiukšlių surinkimą. Prieš ištrindami įsitikinkite, kad ši atsarginė kopija nebūtina:

 rm -Rf .git/refs/original git gc --aggressive --prune=now 
0
19 сент. Kiryl Plyaskevicz atsakymas, pateiktas rugsėjo 19 d 2018-09-19 11:38 '18, 11:38 2018-09-19 11:38

Kiti klausimai apie žymes arba Ask a Question