6 Replies
  1. 72

    Als u wilt dupliceren alle objecten van de belangrijkste repo, doen dit binnen de belangrijkste repo:

    git push --all <url-of-bare-repo>
    

    U kunt ook een halen in de blote repo:

    git fetch <url-of-main-repo>
    

    Je doet in trek, omdat een pull wil samenvoegen met HEAD, die een kale repo niet hebben.

    Kunt u deze toevoegen als afstandsbedieningen om jezelf te redden wat te typen in de toekomst:

    git remote add <whatever-name> <url-of-other-repo>
    

    Dan kun je gewoon doen

    git push --all <whatever-name>
    

    of

    git fetch <whatever-name>
    

    afhankelijk van wat de repo-u bent in. Als <whatever-name> is origin, u kunt zelfs laat het helemaal uit.

    Disclaimer: ik ben geen git-goeroe. Als ik zei dat er iets mis is, wil ik graag een verlicht!

    Update: Lees de comments!

    • De druk lijkt te werken prima, thx voor de tip ik denk dat ik in staat zal zijn om dit integreren in een haak of iets dergelijks.
    • Toen heb ik een git-fetch --all in de kale repository, zie ik niet updates had ik de repo, maar bij het duwen van hen van de belangrijkste repo met git push --all <url-of-bare-repo> ik zie de updates in git log. Vermoedelijk is er een eenvoudige verklaring voor dit – kan iemand dit uitleggen?
    • Wat bedoel je met “niet zien”? Ik ben niet zeker hoe git log zich gedraagt in een kale repository, misschien proberen git log --all?
    • Ja, door “niet te zien” bedoel ik git log niet zien deze updates op de blote repo. (Ook niet git log --all, en ook niet een werkende repo gemaakt door het klonen van de blote – repo via git log --all of door gewoon kijken naar de nieuwe bestanden die u moet zien te krijgen. Het is een vrij snelle test om te zien voor jezelf. Meestal ben ik gewoon benieuwd naar wat ik mis.
    • Klopt, ik zie wat je bedoelt nu. git push van de belangrijkste repo duwt de master tak in de blote repo, en houdt zich niet bezig met de remote tracking takken. Echter, met behulp van git fetch alleen werkt de remote tracking branch origin/master, en negeert de lokale tak master. Dus als het laatste wat je deed was een fetch, dan git log origin/master in de blote repo moet je laten zien de nieuwe commits.
    • Als u een kloon van de kale repo, de kloon krijgt ook de out-of-date master tak, maar de externe ref is niet gekloond met zich mee. Om deze veranderingen doen git pull origin remotes/origin/master te trekken wijzigingen van de remote branch zoals het bestaat in de blote repo. Bottom line: het is waarschijnlijk het beste om altijd druk, altijd of bijna altijd halen, maar geen combinatie van de twee. Hoop dat dit enig gevoel!
    • Als je het verste repo is iets zoals github, waar u geen toegang hebt, niet kunt uitvoeren duwen, etc, kunt u dit doen git fetch -q origin master:master in uw lokale blote repo. Dit haalt de nieuwe spullen van github de master branch en update uw lokale master branch aan.
    • Inderdaad master:master is wat is nodig voor het verplaatsen van het HOOFD naar voren dat van de externe repo. In mijn geval vanwege een probleem ik kon geen verbinding maken met onze blote repo meer omdat git ontbrak. Totdat het opgelost is ik doe een omgekeerde tunnel en ophalen aan het centrale archief met: git fetch ssh://localhost:8765/... master:master en het werkt als een charme. Bedankt!
    • Als u wilt dat alle takken dan kunt u git fetch origin *:*

  2. 64

    Heb ik gemaakt van een repository met behulp van de volgende opdracht

    git clone --bare <remote_repo>

    Daarna heb ik geprobeerd om de update van de blote klonen met het antwoord van Thomas, maar het werkte niet voor mij. Om de kale repository updaten (dat is wat ik denk dat Let_Me_Be was de vraag), ik had te maken van een spiegel archief:

    git clone --mirror <remote_repo>
    

    Dan kon ik de volgende opdracht uitvoeren in de spiegel-repository om te grijpen van de belangrijkste archief updates:

    git fetch --all
    

    Kwam ik deze oplossing door het lezen van Spiegel van een Git Repository Door te Trekken

    • Voor het wijzigen van een bestaande blote repo spiegel, alles wat je hoeft te doen is het toevoegen van 2 lijnen naar de git config bestand op <ARCHIEF>.git/config. In de [remote "origin"] sectie toevoegen fetch = +refs/*:refs/* en mirror = true
  3. 48

    De enige oplossing naast recreëren met git clone --mirror is van Gregor:

    git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
    

    dan kunt u git fetch en zie je de updates. Het vreemde is dat vóór dit, ook al is er een remote geconfigureerd, het heeft geen vestigingen vermeld in git branch -a.

    • Dit heeft me echt geholpen uit! Capistrano project/repo maakt ook gebruik van deze instelling waarmee de one-liner git remote update om het werk te doen.
    • Als de afstandsbediening heeft kracht-bijgewerkte of verwijderde takken (en u wilt om veranderingen), moet u deze mogelijk toevoegen --force en --prune respectievelijk de git fetch lijn.
  4. 40

    Uitgaande van:

    $ git clone --bare https://github.com/.../foo.git
    

    Halen met:

    $ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
    

    Opmerking: --git-dir=foo.git is niet vereist als u cd naar de directory.

    • Raar dat dit antwoord is niet op de top. Ten minste het hier werkt…
    • Ik heb een blote-kloon, en er is geen oorsprong…
    • Hoewel ik ben niet op de hoogte wanneer dat gebeurt, als origin is niet gedefinieerd, kunt u deze altijd vervangen worden door de origin deel met het pad/de url van uw oorspronkelijke archief. bijvoorbeeld $ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
    • Dit is precies wat ik zocht. Dit werkte perfect.
  5. 8

    Na veel gedoe heb ik gevonden dat dit werkt voor mij.

    Keer:

    git clone --mirror ssh://[email protected]:2000/repo
    git remote add remote_site ssh://[email protected]_site.address/repo
    git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
    

    Iedere keer als ik wil om te synchroniseren:

    cd /home/myhome/repo.git
    git --bare fetch ssh://[email protected]:2000/repo
    git  fetch ssh://[email protected]:2000/repo
    git push --mirror remote_site
    
    • De derde lijn (git config remote.origin.fetch 'refs/heads/*:refs/heads/*') is de sleutel. Goed antwoord, bedankt!
    • Als @peterh zei, de lijn git config remote.origin.fetch 'refs/heads/*:refs/heads/*' is het antwoord. Na het raken van deze opdracht, ik kan gewoon git fetch en de repo synchroniseert met de afstandsbediening één.
  6. 3

    Voeg de kale repository als een remote repository, gebruik dan git push.

    • Dus als ik wil om dit te doen zonder te duwen kan ik geen gebruik maken van een kale repository en een symbolische link gebruiken of iets dergelijks?
    • Duwen is de normale methode voor de overdracht van archief inhoud van een kale repository, is er geen noodzaak om het te vermijden.
    • Je kunt niet altijd druk. Bijvoorbeeld, als het kaal is in een privé-netwerk bevindt en de belangrijkste repos is een openbare (op GitHub, bij voorbeeld)

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *