Jeg ønsker at kunne gøre følgende:
Opret en lokal gren baseret på en anden (fjern eller lokal) gren (via git branch
eller git checkout -b
)
Skub den lokale gren
til det eksterne repository (udgiv), men gør den
sporbar, så git pull
og git push
vil virke med det samme.
Hvordan gør jeg det?
Jeg kender til --set-upstream
i Git 1.7, men det er en handling efter oprettelsen. Jeg ønsker at finde en måde at foretage en lignende ændring, når jeg skubber grenen til det eksterne repository.
Før indførelsen af git push -u
var der ingen git push
mulighed for at opnå det, du ønskede. Du var nødt til at tilføje nye konfigurationsangivelser.
Hvis du opretter en ny gren ved hjælp af:
$ git checkout -b branchB
$ git push origin branchB:branchB
Du kan bruge kommandoen git config
for at undgå at redigere direkte i filen .git/config
.
$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB
Eller du kan redigere filen .git/config
manuelt for at få sporingsoplysninger til denne gren.
[branch "branchB"]
remote = origin
merge = refs/heads/branchB
Jeg formoder, at du allerede har klonet et projekt som f.eks:
git clone http://github.com/myproject.git
Så i din lokale kopi opretter du en ny gren og tjekker den ud:
git checkout -b <newbranch>
Hvis vi antager, at du har lavet en "git bare --init" på din server og oprettet myapp.git, skal du:
git remote add origin ssh://example.com/var/git/myapp.git
git push origin master
Herefter bør brugerne være i stand til at
git clone http://example.com/var/git/myapp.git
BEMÆRK: Jeg går ud fra, at du har din server oppe at køre. Hvis den ikke er det, vil det ikke virke. En god vejledning er her.
Tilføj en fjerngren:
git push origin master:new_feature_name
Kontroller om alt er i orden (hent origin og optegnelse af fjerngrenene):
git fetch origin
git branch -r
Opret en lokal gren og følg den eksterne gren:
git checkout -tb new_feature_name origin/new_feature_name
Opdater alt:
git pull
rediger Forældet, brug bare git push -u origin $BRANCHNAME
.
Brug git publish-branch
fra William's miscellaneous Git tools (gitorious repo og clone)).
OK, ingen Ruby, så - ignorer sikkerhedsforanstaltningerne! - tager du de sidste tre linjer i scriptet og laver et bash-script, 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}
Kør derefter git-publish-branch REMOTENAME BRANCHNAME
, hvor REMOTENAME normalt er origin (du kan ændre scriptet til at tage origin som standard, osv...)