Kaip perkelti SVN saugyklą į istoriją į naują „Git“ saugyklą?

Aš perskaičiau „Git“ pamoką, DUK, „Git“ avarijos kursą SVN ir tt, ir jie visi tai paaiškina ir tai, bet niekur negalite rasti paprasto nurodymo, kaip:

SVN saugykla: svn://myserver/path/to/svn/repos

Git saugykla: git://myserver/path/to/git/repos

 git-do-the-magic-svn-import-with-history \ svn://myserver/path/to/svn/repos \ git://myserver/path/to/git/repos 

Negaliu tikėtis, kad tai bus tokia paprasta, ir nesitikiu, kad tai bus viena komanda. Bet tikiuosi, kad jis nesistengs nieko paaiškinti, aš tiesiog pasakysiu, kokių veiksmų reikia imtis šiame pavyzdyje.

1312
17 сент. nustatė Milan Babuškov 17 sept. 2008-09-17 05:04 '08, 5:04 am. 2008-09-17 05:04
@ 30 atsakymų

Magija:

 $ git svn clone http://svn/repo/here/trunk 

Git ir SVN veikia skirtingai. Jums reikia išmokti „Git“ ir, jei norite stebėti SVN pakeitimus, turite išmokti „ git-svn . git-svn vadovo puslapyje yra geras pavyzdys:

 $ git svn --help 
465
17 сент. atsakymas pateikiamas jfm3 17 sep . 2008-09-17 05:08 '08, 5:08 am. 2008-09-17 05:08

Sukurkite naudotojo failą (t.y. users.txt ), kad galėtumėte susieti SVN naudotojus su „Git“

 user1 = First Last Name <email@address.com> user2 = First Last Name <email@address.com> ... 

Šią vienkartinį šriftą galite naudoti šablonui sukurti iš esamos SVN saugyklos:

 svn log --xml | grep "<author>" | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' | tee users.txt 

SVN bus sustabdytas, jei faile bus rastas trūkstamas SVN vartotojas. Bet po to jūs galite atnaujinti failą ir pasiėmimą, iš kur jūs likote.

Dabar pašalinkite SVN duomenis iš saugyklos:

 git svn clone --stdlayout --no-metadata --authors-file=users.txt svn://hostname/path dest_dir-tmp 

Ši komanda sukuria naują „Git“ saugyklą „ dest_dir-tmp ir pradės ištraukti SVN saugyklą. Atkreipkite dėmesį, kad vėliavėlė „--stdoutout“ reiškia, kad turite bendrą SVN / išdėstymą, filialus /, / SVN žymes. Jei jūsų išdėstymas yra kitoks, patikrinkite parinktis - --tags , - --branches , - --trunk (apskritai git svn help ).

Visi bendrieji protokolai leidžiami: svn:// , http:// , https:// . URL turėtų būti nukreiptas į bazinę saugyklą, pavyzdžiui, http://svn.mycompany.com/myrepo/repository . Tai neturėtų apimti /trunk , /tag arba /branches .

Pastaba: atlikus šią komandą, labai dažnai atrodo, kad operacija „įšaldo / užšąla“, ir visai normalu, kad po naujo saugyklos inicijavimo jis gali ilgai užstrigti. Galiausiai pamatysite žurnalo pranešimus, rodančius, kad jis migruoja.

Taip pat atkreipkite dėmesį, kad jei --no-metadata vėliavą „ --no-metadata , „Git“ prideda pranešimą apie atitinkamą SVN versiją į įsipareigojimų pranešimą (t.y. git-svn-id: svn://svn.mycompany.com/myrepo/<branchname/trunk>@<RevisionNumber> <Repository UUID> )

Jei naudotojo vardas nerastas, atnaujinkite failą users.txt ir tada:

 cd dest_dir-tmp git svn fetch 

Jei turite didelį projektą, gali tekti kelis kartus pakartoti šią paskutinę komandą, kol bus gauti visi „Subversion“ sandoriai:

border=0
 git svn fetch 

Baigęs Git patikrins SVN trunk į naują filialą. Kitos šakos yra sukonfigūruotos kaip nuotolinio valdymo pultas. Galite peržiūrėti kitus SVN filialus:

 git branch -r 

Jei savo saugykloje norite išsaugoti kitus nuotolinius filialus, kiekvienam iš jų norite sukurti vietinį filialą rankiniu būdu. (Praleiskite magistralę / magistralę.) Jei to nepadarysite, filialai nebus klonuojami paskutiniame etape.

 git checkout -b local_branch remote_branch # It OK if local_branch and remote_branch are the same name 

Žymos importuojamos kaip filialai. Turite sukurti vietinį filialą, sukurti žymą ir ištrinti filialą, kad jie būtų žymenys „Git“. Atlikite žymę „v1“:

 git checkout -b tag_v1 remotes/tags/v1 git checkout master git tag v1 tag_v1 git branch -D tag_v1 

Nukopijuokite „GIT -SVN“ saugyklą į švarią „Git“ saugyklą:

 git clone dest_dir-tmp dest_dir rm -rf dest_dir-tmp cd dest_dir 

Vietos filialai, sukurti anksčiau iš nuotolinių filialų, bus nukopijuoti tik kaip nuotoliniai filialai į naują klonuotą saugyklą. (Praleisti kamieną / kapitoną.) Kiekvienai filialui, kurią norite išsaugoti

 git checkout -b local_branch origin/remote_branch 

Galiausiai, ištrinkite ištrintą „Git“ iš savo švarios saugyklos, kuri nurodo dabar ištrintą laikiną saugyklą:

 git remote rm origin 
1383
19 окт. Atsakymą pateikė cmcginty 19 oct. 2010-10-19 22:45 „10, 10:45 val. 2010-10-19 22:45

Perkelkite „Subversion“ saugyklą į „Git“ saugyklą . Pirmiausia turite sukurti failą, kuris atitiktų „Subversion“ operacijų autorių pavadinimus su „Git“ nariais, tarkim, ~/authors.txt :

 jmaddox = Jon Maddox <jon@gmail.com> bigpappa = Brian Biggs <bigpappa@gmail.com> 

Tada galite įkelti „Subversion“ duomenis į „Git“ saugyklą:

 mkdir repo  cd repo git svn init http://subversion/repo --no-metadata git config svn.authorsfile ~/authors.txt git svn fetch 

Jei esate „Mac“, galite gauti „ git-svn iš „MacPorts“ įdiegdami git-core +svn .

Jei subversion saugykla yra tame pačiame kompiuteryje, kuriame yra pageidaujama „Git“ saugykla, galite naudoti šią sintaksę „init“ žingsniui, kitaip nesvarbu:

 git svn init file:///home/user/repoName --no-metadata 
172
17 сент. atsakymą pateikė Eugenijus Yokota 17 sep. 2008-09-17 05:10 '08, 5:10, 2008-09-17 05:10

Aš naudoju scenarijų svn2git ir jis veikia kaip žavesys! https://github.com/nirvdrum/svn2git

64
01 февр. Atsakymą pateikė Thiago Leão Moreira 01 vasaris. 2011-02-01 10:53 '11 at 10:53 2011-02-01 10:53

Siūlome patogiai dirbti su „Git“ prieš bandydami naudoti „git -svn“ visą laiką, t.y. išsaugokite SVN kaip centrinį repo ir naudokite „Git“ vietoje.

Tačiau, norint paprasta migracija su visa istorija, yra keletas paprastų žingsnių:

Inicijuoti vietinę repo:

 mkdir project cd project git svn init http://svn.url 

Pažymėkite, kiek toli norite pradėti importuoti versijas:

 git svn fetch -r42 

(arba tiesiog „git svn fetch“ visoms revoliucijoms)

Iš tikrųjų pasiimkite viską, nes:

 git svn rebase 

Importo rezultatą galite patikrinti naudodami „Gitk“. Nesu tikras, ar jis veikia „Windows“, jis veikia OSX ir Linux sistemose:

 gitk 

Jei turite SVN saugyklą, kuri klonuojama vietoje, galite spustelėti centralizuotą Git repo, kad supaprastintumėte bendradarbiavimą.

Pirmiausia sukurkite tuščią nuotolinį atpirkimą (galbūt GitHub ?):

 git remote add origin git@github.com:user/project-name.git 

Tada pasirinktinai sinchronizuokite pagrindinį filialą taip, kad traukos operacija automatiškai sujungtų nuotolinį valdiklį su vietiniu kapitonu, kai abu yra nauja medžiaga:

 git config branch.master.remote origin git config branch.master.merge refs/heads/master 

Po to jums gali būti įdomu išbandyti savo „ git_remote_branch įrankį, kuris padės jums dirbti su nutolusiais filialais:

Pirmasis aiškinamasis raštas : „ Git“ nuotoliniai filialai

Tolesnis darbas naujausia versija: „ Git laikas, dirbant su git_remote_branch

54
17 сент. atsakymas pateikiamas webmat 17 sep . 2008-09-17 21:20 '08 at 9:20 pm 2008-09-17 21:20

Yra naujas sprendimas sklandžiam perkėlimui iš „Subversion“ į „Git“ (arba vienalaikiam naudojimui): „SubGit“ ( http://subgit.com/ ).

Aš pats dirbau su šiuo projektu. Mes naudojame „SubGit“ mūsų saugyklose - kai kurie mano komandos nariai naudoja „Git“ ir kai kuriuos „Subversion“.

Jei norite perjungti iš „Subversion“ į „Git“, naudodami „SubGit“, turite paleisti:

 $ subgit install svn_repos ... TRANSLATION SUCCESSFUL 

Po to jūs gausite „Git“ saugyklą svn_repos / .git ir galėsite jį klonuoti arba tiesiog toliau naudoti „Subversion“ ir šią naują „Git“ saugyklą: „SubGit“ užtikrins, kad abi jos būtų sinchronizuotos.

Jei „Subversion“ saugykloje yra keletas projektų, svn_repos / git kataloge bus sukurtos kelios „Git“ saugyklos. Jei norite nustatyti transliaciją prieš paleidžiant, atlikite šiuos veiksmus:

 $ subgit configure svn_repos $ edit svn_repos/conf/subgit.conf (change mapping, add authors mapping, etc) $ subgit install svn_repos 

Naudodami „ SubGit“ galite pereiti prie grynojo „Git“ (ne „git -svn“) ir pradėti jį naudoti, išlaikydami „Subversion“ tiek, kiek jums reikia (pvz., Jau sukonfigūruotiems kūrimo įrankiams).

Tikiuosi, kad tai padės!

26
24 нояб. Aleksandro Kitaevo atsakymas lapkričio 24 d. 2011-11-24 23:12 '11 11:12 val. 2011-11-24 23:12

Žr. Oficialų „ git -svn“ puslapį . Visų pirma žiūrėkite skyrių „Pagrindiniai pavyzdžiai“:

Stebėti ir prisidėti prie viso projekto, kurį valdo „Subversion“ (su bagažine, žymėmis ir filialais):

 # Clone a repo (like git clone): git svn clone http://svn.foo.org/project -T trunk -b branches -t tags 
15
17 сент. Atsakymą „ EfForEffort“ pateikia 17 sep . 2008-09-17 20:09 '08 at 8:09 pm 2008-09-17 20:09
13
12 февр. Atsakymas duotas kdahlhaus 12 vasaris 2011-02-12 00:17 '11 prie 0:17 2011-02-12 00:17

SubGit (prieš mėlyną mirties ekraną)

 subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo 

Viskas

+ Norėdami atnaujinti iš SVN, pirmojo komandos sukurta „Git“ saugykla.

 subgit import directory/path/Local.git.Repo 

Naudojau būdą, kaip iš karto pereiti prie git didelio saugyklos.
Žinoma, jums reikia mokymo.
Bet jūs niekada negalite sustabdyti plėtros proceso.

Štai mano kelias.

Mano sprendimas atrodo taip:

  • Perkelkite SVN į Git saugyklą
  • Atnaujinkite savo git saugyklą prieš perkeldami komandą į .

Migracija užima daug laiko dideliam SVN saugyklai.
Bet atnaujintos migracijos atnaujinimas yra tik sekundės.

Žinoma, aš naudoju SubGit , mama. git -svn daro mane mėlyną mirties ekraną . Tiesiog nuolat. Ir git -svn man nuobodžiavo „git“ failo pavadinimą pernelyg ilgai .

Žingsniai

1. Atsisiųskite SubGit

2. Paruoškite perdavimo ir atnaujinimo komandas.

Tarkime, tai darome Windows sistemoje (tai yra trivialus „Linux“ prievadui).
SubGit bin kataloge (subgit-2.XX), sukurkite du .bat failus.

Perkėlimo failo / komandos turinys:

 start subgit import --svn-url url://svn.serv/Bla/Bla directory/path/Local.git.Repo 

„Start“ komanda yra neprivaloma čia („Windows“). Tai leis jums matyti klaidas paleidžiant ir paliekant apvalkalą atidarius SubGit.

Čia galite pridėti papildomų parametrų, panašių į git -svn . Naudoju tik - numatytąjį domeną myCompanyDomain.com, norėdami pataisyti SVN autorių el. Pašto adresą.
Turiu standartinę SVN saugyklos struktūrą (kamieną / šakas / žymes), ir mes neturėjome problemų su „žemėlapiu“. Todėl darau daugiau.

(Jei norite perkelti žymes, pvz., Filialus ar SVN, kad turėtumėte kelis filialus / žymes, galite naudoti išsamesnį „Subgit“ metodą

Patarimas 1 . Jei norite greitai pamatyti, kaip viskas vyksta (kai kurios rūšies derinimas), naudokite „Minimal-revision YourSvnRevNumber“. Ypač naudinga pamatyti autorizuotus autoriaus vardus ar el. Laiškus.
Arba apribokite migracijos istorijos gylį.

Patarimas 2 . Migracija gali būti nutraukta ( Ctrl + C ) ir atkuriama vykdant šią komandų / atnaujinimo failą.
Nerekomenduoju tai daryti didelėms saugykloms. Aš gavau „Išsamią„ Java + Windows “išimtį.

Patarimas 3 . Geriau sukurti savo kapinyno kopiją be rezultatų.

Atnaujinamo failo / komandos turinys:

 start subgit import directory/path/Local.git.Repo 

Ją galite paleisti bet kuriuo metu, kai norite, kad paskutinė komanda prisiimtų git saugyklą.

Įspėjimas! Nelieskite savo tuščios kapinyno (pvz., Kurdami filialus).
Gausite šią mirtiną klaidą:

Neatkuriama klaida: nesinchronizuota ir negali būti sinchronizuota ... Subversion versijų vertimas į „Git“ ...

3. Paleiskite pirmą komandą / failą. Dideliam saugojimo laikui reikia. 30 valandų mano nedideliam saugojimui.

Viskas
Git saugyklą galite atnaujinti iš SVN bet kuriuo metu, kiek kartų paleisdami antrąjį failą / komandą. Ir prieš perjungdami savo vystymo komandą į git.
Tai užtrunka kelias sekundes.



Yra dar viena naudinga užduotis.

Spustelėkite vietinį „Git“ saugyklą į „Git“ nuotolinį saugyklą

Ar tai jūsų atveju? Mes tęsiame.

  • Tinkinkite savo konsoles

Vykdyti:

 $ git remote add origin url://your/repo.git 
  1. Pasiruoškite iš pradžių išsiųsti didžiulę vietinę „Git“ saugyklą į nuotolinę saugyklą.

Pagal nutylėjimą jūsų git negali siųsti didelių gabalų. mirtinas: nuotolinis galas netikėtai pakabintas

Vykdykite:

 git config --global http.postBuffer 1073741824 

524288000 - 500 MB 1073741824 - 1 GB ir tt

Ištaisykite vietos sertifikato problemas . Jei jūsų git serveris naudoja pažeistą sertifikatą.

Turiu išjungtus sertifikatus .

Be to, jūsų „Git“ serveryje gali būti ribojamas prašymų, kuriuos reikia nustatyti, skaičius .

  1. Spustelėkite visus perkėlimus į „Git“ nuotolinį saugyklą.

Paleisti vietiniu git:

 git push origin --mirror 

(„git push origin“ *: * „senesnėms„ git “versijoms)

Jei gausite šią klaidą: „Git“ negali būti rodomas: nėra tokio failo ar katalogo ... Man visiškas mano atminties atkūrimas išsprendžia šią klaidą (30 valandų). Galite išbandyti šias komandas

 git push origin --all git push origin --tags 

Arba pabandykite iš naujo įdiegti „Git“ ( nenaudingas man ). Arba galite sukurti filialus iš visų žymių ir spustelėkite juos. Arba arba, arba ...

12
06 февр. atsakymas pateikiamas it3xl 06 Feb. 2015-02-06 14:12 '15 at 14:12 2015-02-06 14:12

atstovas

Sudėtingais atvejais Eric S. Raymond saugykla yra pasirinkimo priemonė. Be SVN, ji palaiko daugelį kitų versijų valdymo sistemų, naudojant fast-export formatą, taip pat CVS . Autorius praneša apie sėkmingas konversijas į senas saugyklas, pvz., „ Emacs“ ir „ FreeBSD“ .

Atrodo, kad įrankis nukreiptas į beveik tobulą konversiją (pvz., Konvertuojant SVN svn:ignore ypatybes .gitignore failams) net ir sudėtingoms saugykloms, turinčioms ilgą istoriją. Daugeliu atvejų gali būti lengviau naudoti kitus įrankius.

Prieš reposurgeon į reposurgeon komandų eilutės reposurgeon , perskaitykite puikų DVCS migracijos vadovą , kuris padės jums atlikti konversijos procesą po žingsnio.

7
20 марта '15 в 21:20 2015-03-20 21:20 atsakymas pateikiamas krlmlr kovo 20 d. 15 val. 21:20 2015-03-20 21:20

Šis „atlassian“ vadovas yra vienas iš geriausių:

https://www.atlassian.com/git/migration

Šis įrankis - https://bitbucket.org/atlassian/svn-migration-scripts - taip pat labai naudingas kuriant autorių.txt, be kita ko.

7
13 марта '14 в 16:58 2014-03-13 16:58 atsakymą pateikė Andrew B , kovo 13 d. 14, 16:58 2014-03-13 16:58

Daugkartinis išplėstinis atsakymas naudojant tik gitą, svn ir bash. Jis apima veiksmus, skirtus SVN saugykloms, kurios nenaudoja įprastinio išdėstymo su bagažinės / šakų / žymių išdėstymu (SVN nieko nedaro tokiam išdėstymui).

Pirmiausia naudokite šį „bash“ scenarijų, kad nuskaitytumėte SVN repo skirtingiems žmonėms, kurie prisidėjo kuriant žemėlapio failo šabloną:

 #!/usr/bin/env bash authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq) for author in ${authors}; do echo "${author} = NAME <USER@DOMAIN>"; done 

Naudokite tai sukurti authors failą, kuriame susieti svn naudotojo vardus su naudotojų user.name ir user.email kuriuos nustato jūsų kūrėjai, naudodami git config ypatybes user.name ir user.email (atkreipkite dėmesį, kad paslaugai, pvz., „GitHub“, atitinkamo laiško prieinamumą).

Tada git svn klonuokite svn saugyklą į git saugyklą ir pasakykite apie rungtynes:

git svn clone --authors-file=authors --stdlayout svn://example.org/Folder/projectroot

Tai gali užtrukti labai ilgai, nes „git svn“ individualiai tikrins kiekvieną esamą žymą ar filialą. (Atkreipkite dėmesį, kad žymos SVN yra tikrai šakos, todėl jos patenka į Git). Jūs galite jį pagreitinti pašalindami senus žymenis ir šakas SVN, kurių nereikia.

Tai darant serveryje tame pačiame tinkle arba tame pačiame serveryje taip pat gali iš tikrųjų pagreitinti. Be to, jei dėl kokių nors priežasčių šis procesas yra nutraukiamas, galite jį atnaujinti

git svn rebase --continue

Daugeliu atvejų esate čia. Bet jei jūsų SVN repo turi netradicinį išdėstymą, kuriame tiesiog turite katalogą SVN, kurį norite įdėti į git šaką, galite atlikti keletą papildomų veiksmų.

Paprasčiausias yra tiesiog sukurti naują repo SVN serveryje, kuris atitinka sutartį, ir naudokite svn copy kad svn copy katalogą į stuburą ar šaką. Tai gali būti vienintelis būdas, jei jūsų katalogas yra visiškai repo šaknis, kai paskutinį kartą jį išbandžiau, git svn tiesiog atsisakė patikrinti.

Taip pat galite tai padaryti naudodami git. Naudodami git svn clone tiesiog naudokite katalogą, kurį norite įdėti į git šaką.

Po paleidimo

 git branch --set-upstream master git-svn git svn rebase 

Atkreipkite dėmesį, kad tai reikalauja 1,7 ar daugiau gitų.

6
25 сент. Atsakymas duodamas po rugsėjo 25 d 2013-09-25 12:23 '13, 12:23 pm 2013-09-25 12:23

Turite įdiegti

 git git-svn 

Kopijuojama iš šios nuorodos http://john.albin.net/git/convert-subversion-to-git .

1. Gauti visų „Subversion“ kvietėjų sąrašą

„Subversion“ tiesiog nurodo kiekvieno įsipareigojimo naudotojo vardą. „Git“ įsipareigojimai turi daug turtingesnių duomenų, tačiau paprasčiausiai įrašant autorių turite nurodyti vardą ir el. Pašto adresą. Pagal numatytuosius nustatymus įrankis „git -svn“ tiesiog įrašys SVN naudotojo vardą tiek autoriaus, tiek el. Pašto laukuose. Tačiau su nedideliu kiekiu galite sukurti visų SVN naudotojų sąrašą ir tai, kas atitinka jų pavadinimą ir „Git“ adresus. Šį sąrašą gali naudoti „git -svn“, kad būtų galima konvertuoti paprastus „svn“ pavadinimus į atitinkamus „Git“ komutatorius.

Iš vietinio „Subversion“ testo šaknies paleiskite šią komandą:

 svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt 

Tai bus užfiksuoti visus žurnalo pranešimus, sulaikyti naudotojo vardus, pašalinti bet kokius naudotojo vardus, surūšiuoti naudotojo vardus ir įdėti juos į failą „autoriai-transform.txt“. Dabar redaguokite kiekvieną failo eilutę. Pavyzdžiui, konvertuokite:

 jwilkins = jwilkins <jwilkins> 

į tai:

 jwilkins = John Albin Wilkins <johnalbin@example.com> 

2. Klonuokite „Subversion“ saugyklą su „git -svn“

 git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp 

Tai bus standartinis „git -svn“ transformavimas (naudojant autorių-transform.txt failą, sukurtą 1 veiksme) ir „Git“ saugyklą įdėkite į „~ / temp“ aplanką savo namų katalogo viduje.

3. Konvertuokite svn: ignoruokite ypatybes prieš .gitignore

Jei jūsų svn repo naudojamas svn: ignoruoti ypatybes, galite lengvai konvertuoti jį į .gitignore failą, naudodami:

 cd ~/temp git svn show-ignore > .gitignore git add .gitignore git commit -m 'Convert svn:ignore properties to .gitignore.' 

4. Paspauskite saugyklą į „Git“ tuščią saugyklą

Pirma, sukurkite tuščią saugyklą ir nustatykite numatytąją atsako šaką „svn“.

 git init --bare ~/new-bare.git cd ~/new-bare.git git symbolic-ref HEAD refs/heads/trunk 

Tada perkelkite temp saugyklą į naują atvirą saugyklą.

 cd ~/temp git remote add bare ~/new-bare.git git config remote.bare.push 'refs/remotes/*:refs/heads/*' git push bare 

Dabar galite saugiai ištrinti ~ / temp saugyklą.

5. Pervardykite „kamieno“ filialą į „magistras“

Jūsų pagrindinis vystymosi skyrius bus vadinamas „kamieno“, kuris atitinka pavadinimą, kuris buvo „Subversion“. Jūs norite jį pervadinti į standartinį „Git“ filialą, naudodami:

 cd ~/new-bare.git git branch -m trunk master 

6. Filialų ir žymių valymas

„git -svn“ žymi „Subversions“ žymes į labai trumpus „Git“ filialus „žymės / pavadinimas“. Visus šiuos filialus norite konvertuoti į faktines „Git“ žymes, naudodami:

 cd ~/new-bare.git git for-each-ref --format='%(refname)' refs/heads/tags | cut -d / -f 4 | while read ref do git tag "$ref" "refs/heads/tags/$ref"; git branch -D "tags/$ref"; done 

Šis žingsnis užtruks šiek tiek daugiau. :-) Bet nesijaudinkite; jūsų unix apvalkalas suteiks> antrinę užklausą papildomai ilgai komandai, kuri prasideda git for-every-ref.

6
22 июля '14 в 7:36 2014-07-22 07:36 atsakymą pateikė Valarpirai liepos 14 d. 14, 7:36 2014-07-22 07:36

Dabar „GitHub“ turi importo funkciją iš SVN saugyklos . Aš niekada to nebandžiau.

5
21 сент. atsakymas pateikiamas webmat 21 sep . 2008-09-21 05:15 '08 at 5:15 am 2008-09-21 05:15

Mes galime naudoti git svn clone komandas, kaip parodyta žemiau.

  • svn log -q <SVN_URL> | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors.txt

Viršyta komanda sukurs autoriaus failą iš SVN.

  • svn log --stop-on-copy <SVN_URL>

Pirmiau pateikta komanda jums suteiks pirmąjį versijos numerį, kai bus sukurtas SVN projektas.

  • git svn clone -r<SVN_REV_NO>:HEAD --no-minimize-url --stdlayout --no-metadata --authors-file authors.txt <SVN_URL>

Pirmiau pateikta komanda sukurs „Git“ saugyklą vietiniu režimu.

Problema yra ta, kad ji nepakeis šakų ir žymių stumti. Turėsite tai padaryti rankiniu būdu. Pavyzdžiui, žemiau filialams:

 $ git remote add origin https://github.com/pankaj0323/JDProjects.git $ git branch -a * master remotes/origin/MyDevBranch remotes/origin/tags/MyDevBranch-1.0 remotes/origin/trunk $$ git checkout -b MyDevBranch origin/MyDevBranch Branch MyDevBranch set up to track remote branch MyDevBranch from origin. Switched to a new branch 'MyDevBranch' $ git branch -a * MyDevBranch master remotes/origin/MyDevBranch remotes/origin/tags/MyDevBranch-1.0 remotes/origin/trunk $ 

Žymos:

 $git checkout origin/tags/MyDevBranch-1.0 Note: checking out 'origin/tags/MyDevBranch-1.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at 3041d81... Creating a tag $ git branch -a * (detached from origin/tags/MyDevBranch-1.0) MyDevBranch master remotes/origin/MyDevBranch remotes/origin/tags/MyDevBranch-1.0 remotes/origin/trunk $ git tag -a MyDevBranch-1.0 -m "creating tag" $git tag MyDevBranch-1.0 $