Noriu, kad galėčiau atlikti šiuos veiksmus:
Sukurti vietinę šaką, paremtą kita (nutolusia arba vietine) šaka (naudojant git branch
arba git checkout -b
).
Įkelkite vietinę šaką
į nuotolinę saugyklą (paskelbti), bet padarykite taip, kad ji
sekama, kad git pull
ir git push
veiktų iš karto.
Kaip tai padaryti?
Žinau apie --set-upstream
Git 1.7 versijoje, bet tai yra veiksmas po sukūrimo. Noriu rasti būdą, kaip atlikti panašų pakeitimą, kai atšaka perkeliama į nuotolinę saugyklą.
Prieš įvedant git push -u
, nebuvo git push
parinkties, kuri leistų gauti tai, ko norite. Reikėjo pridėti naujus konfigūracijos teiginius.
Jei sukursite naują šaką naudodami:
$ git checkout -b branchB
$ git push origin branchB:branchB
Galite naudoti git config
komandą, kad nereikėtų tiesiogiai redaguoti .git/config
failo.
$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB
Arba galite rankiniu būdu redaguoti .git/config
failą, kad į šią šaką būtų įrašyta sekimo informacija.
[branch "branchB"]
remote = origin
merge = refs/heads/branchB
Manau, kad jau esate klonavę tokį projektą kaip:
git clone http://github.com/myproject.git
Tada savo vietinėje kopijoje sukurkite naują šaką ir ją patikrinkite:
git checkout -b <newbranch>
Tarkime, kad savo serveryje atlikote "git bare --init" ir sukūrėte myapp.git, turėtumėte:
git remote add origin ssh://example.com/var/git/myapp.git
git push origin origin master
Po to naudotojai turėtų galėti
git clone http://example.com/var/git/myapp.git
PAMINĖJIMAS: Aš darau prielaidą, kad jūsų serveris yra įjungtas ir veikia. Jei ne, tai neveiks. Gera instrukcija yra čia.
Pridėkite nutolusią šaką:
git push origin master:new_feature_name
Patikrinkite, ar viskas gerai (paimkite pradinę šaką ir sudarykite nuotolinių šakų sąrašą):
git fetch origin
git branch -r
Sukurkite vietinę šaką ir stebėkite nuotolinę šaką:
git checkout -tb new_feature_name origin/new_feature_name
Atnaujinkite viską:
git pull
redaguoti Neaktualu, tiesiog naudokite git push -u origin $BRANCHNAME
Naudokite git publish-branch
iš William's miscellaneous Git tools (gitorious repo ir clone).
Gerai, nėra Ruby, taigi - nekreipiant dėmesio į apsaugos priemones! - paimkite tris paskutines scenarijaus eilutes ir sukurkite bash scenarijų git-publish-branch
:
#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}
Tada paleiskite git-publish-branch REMOTENAME BRANCHNAME
, kur REMOTENAME paprastai yra origin (scenarijų galite modifikuoti, kad origin būtų numatytoji reikšmė ir t. t.).