Hoe een seed/kick-start project te klonen zonder de hele geschiedenis?

Houd er rekening mee dat het gebruik van --depth=1parameter voorkomtdat je het project naar een nieuwe repository pusht.


Antwoord 1, autoriteit 100%

Je kunt een

. doen

git clone <git_url>

verwijder de .git-repository uit je map. Die al je geschiedenis zal wissen.

Je kunt een

git init 

die een geheel nieuw git-project voor je zal creëren.

Dit is misschien niet de beste manier. Maar dit zal werken. Ik hoop dat het helpt.


Antwoord 2, autoriteit 51%

Zolang je volledig verlies van geschiedenis als geen probleem beschouwt, is de door Ajay voorgestelde aanpak volkomen geldig. Maar voor het geval je de geschiedenis van je ondiepe kloon wilt behouden, heb ik een andere suggestie.


Een ondiepe kloon pretendeert de volledige geschiedenis te hebben door gebruik te maken van een zogenaamd graftpointom de ouder van de “eerste” commit te faken. Als we aannemen dat we de volledige geschiedenis beschikbaar hebben, kunnen we de vraag herformuleren: Hoe kan ik de geschiedenis voor een specifieke revisie weggooien?

Dit betekent dat we een combinatie van een graftpunt en een git filter-branch(zoals gesuggereerd in de gekoppelde vraag). Houd er echter rekening mee dat dit uw volledige geschiedenis zal herschrijven, waardoor de nieuwe niet compatibel is met de afstandsbediening waarvan we aanvankelijk hebben gekloond. Daarom moeten we de oude afstandsbediening uit onze repository verwijderen.

git remote remove <old-remote-name>

Nu kunnen we beginnen met herschrijven. Laten we aannemen dat we de huidige masterde nieuwe root voor de repository willen laten vastleggen.

git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all

Dit zal de volledige geschiedenis van onze repository herschrijven, met de huidige master-commit als de nieuwe root. Je kunt het herschrijven voltooien door de “back-up”-verwijzingen in refs/originalte verwijderen. Verder kun je nu het .git/shallowbestand verwijderen.

Nadat je dit hebt gedaan, zou je de nu niet-geëntegeschiedenis in je nieuwe afstandsbediening moeten kunnen pushen.


Antwoord 3

Probeer zoiets als dit:

mkdir -p /tmp/git-copy
cd /tmp/git-copy
# create another copy of your repository
git clone file:///path/to/cloned/repo
cd repo
git rebase -i (first-commit)
# in vim:
# :2,$s/^pick/squash
# :w
# Now wait, it will take a while...
git push --mirror [email protected]:username/new-repo.git

Ik heb het zojuist geprobeerd op deze repository. Lijkt te werken – geen geschiedenis en alle submodules zijn intact.

Other episodes