Quero ser capaz de fazer o seguinte:
Criar uma filial local com base em alguma outra filial (remota ou local) (via git branch
ou git checkout -b
)
Empurre a filial local para o repositório remoto (publicar), mas faça-o trackable de modo que o "git pull" e o "git push" funcionem imediatamente.
Como é que eu faço isso?
Eu sei sobre --set-upstream
em Git 1.7, mas isso é uma ação pós-criação. Eu quero encontrar uma maneira de fazer uma mudança similar ao empurrar o ramo para o repositório remoto.
Antes da introdução do git push -u
, não havia a opção do git push
para obter o que você deseja. Você tinha que adicionar novas instruções de configuração.
Se você criar uma nova filial usando:
$ git checkout -b branchB
$ git push origin branchB:branchB
Você pode utilizar o comando git config
para evitar a edição direta do arquivo .git/config
.
$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB
Ou você pode editar manualmente o arquivo .git/config
para ter informações de rastreamento para esta filial.
[branch "branchB"]
remote = origin
merge = refs/heads/branchB
Suponho que você já tenha clonado um projeto como:
git clone http://github.com/myproject.git
Depois, na sua cópia local, crie uma nova filial e confira:
git checkout -b <newbranch>
Supondo que você fez um "git bare --init" no seu servidor e criou o myapp.git, você deve:
git adicionar origem remota ssh://example.com/var/git/myapp.git
mestre da origem do git push
Depois disso, os usuários devem ser capazes de
clone de git http://example.com/var/git/myapp.git
NOTE: Presumo que tenhas o teu servidor a funcionar. Se não estiver, não vai funcionar. Um bom "como fazer" é aqui.
Adicione uma filial remota:
git push origin master:new_feature_name
Verifique se tudo está bem (procure a origem e liste as filiais remotas):
git fetch origin
git branch -r
Crie uma filial local e controle a filial remota:
git checkout -tb new_feature_name origin/new_feature_name
Actualizar tudo:
git pull
**edit*** Desatualizado, basta utilizar git push -u origem $BRANCHNAME
.
Utilize git publish-branch
de William's miscellaneous Git tools (gitorious repo e clone).
OK, sem Ruby, então - ignorando as salvaguardas! - pegue as últimas três linhas do script e crie um script de bash, 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}
Depois execute git-publish-branch REMOTENAME BRANCHNAME
, onde REMOTENAME é geralmente origem (você pode modificar o script para ter origem como padrão, etc...)