Comment puis-je insérer une nouvelle twig locale dans un référentiel Git distant et la suivre également?

Je veux pouvoir faire ce qui suit:

  1. Créer une twig locale basée sur une autre twig (distante ou locale) (via git branch ou git checkout -b )

  2. Poussez la twig locale vers le référentiel distant (publish), mais rendez-la traçable pour que git pull et git push fonctionnent immédiatement.

Comment je fais ça?

Je connais --set-upstream dans Git 1.7, mais c’est une action post-création. Je veux trouver un moyen de faire un changement similaire lorsque vous poussez la twig vers le référentiel distant.

Dans Git 1.7.0 et versions ultérieures, vous pouvez acheter une nouvelle twig:

 git checkout -b  

Modifier les fichiers, append et valider Puis poussez avec l’ option -u (short for --set-upstream ) :

 git push -u origin  

Git mettra en place les informations de suivi pendant la poussée.

Si vous ne partagez pas votre repo avec d’autres utilisateurs, cela est utile pour transférer toutes vos twigs vers la télécommande, et --set-upstream pour vous aider à effectuer le suivi:

 git push --all -u 

(Pas exactement ce que demandait l’OP, mais ce one-liner est assez populaire)

Si vous partagez votre repo avec d’autres, ce n’est pas vraiment une bonne forme, car vous encombrerez le repo avec toutes vos twigs expérimentales douteuses.

Avant l’introduction de git push -u , il n’y avait pas d’option git push pour obtenir ce que vous désirez. Vous deviez append de nouvelles instructions de configuration.

Si vous créez une nouvelle twig en utilisant:

 $ git checkout -b branchB $ git push origin branchB:branchB 

Vous pouvez utiliser la commande git config pour éviter de modifier directement le fichier .git/config .

 $ git config branch.branchB.remote origin $ git config branch.branchB.merge refs/heads/branchB 

Ou vous pouvez éditer manuellement le fichier .git/config pour avoir des informations de suivi sur cette twig.

 [branch "branchB"] remote = origin merge = refs/heads/branchB 

Simplement dit, pour créer une nouvelle twig locale , faites:

 git branch  

Pour le transmettre au référentiel distant , faites:

 git push -u origin  

Une légère variation des solutions déjà données ici:

  1. Créez une twig locale basée sur une autre twig (distante ou locale):

     git checkout -b branchname 
  2. Poussez la twig locale vers le référentiel distant (publish), mais rendez-la traçable pour que git pull et git push fonctionnent immédiatement

     git push -u origin HEAD 

    Utiliser HEAD est un “moyen pratique de pousser la twig actuelle au même nom sur la télécommande”. Source: https://git-scm.com/docs/git-push En termes Git, HEAD (en majuscule) est une référence au sumt de la twig en cours (arborescence).

    L’option -u est juste courte pour --set-setupstream . Cela appenda une référence de suivi en amont pour la twig en cours. vous pouvez le vérifier en consultant votre fichier .git / config:

    Entrez la description de l'image ici

Je suppose que vous avez déjà cloné un projet comme:

 git clone http://github.com/myproject.git 
  1. Ensuite, dans votre copie locale, créez une nouvelle twig et extrayez-la:

     git checkout -b  
  2. En supposant que vous avez créé un “git bare –init” sur votre serveur et créé myapp.git, vous devriez:

     git remote add origin ssh://example.com/var/git/myapp.git git push origin master 
  3. Après cela, les utilisateurs devraient pouvoir

     git clone http://example.com/var/git/myapp.git 

REMARQUE: je suppose que votre serveur est opérationnel. Si ce n’est pas le cas, cela ne fonctionnera pas. Un bon comment faire est ici .

AJOUTÉE

Ajouter une twig distante:

 git push origin master:new_feature_name 

Vérifier si tout est bon (récupérer l’origine et lister les twigs distantes):

 git fetch origin git branch -r 

Créez une twig locale et suivez la twig distante:

 git checkout -tb new_feature_name origin/new_feature_name 

Tout mettre à jour:

 git pull 

Je fais simplement

 git push -u origin localBranch:remoteBranchToBeCreated 

sur un projet déjà cloné.

Git crée une nouvelle twig appelée remoteBranchToBeCreated sous mes commits que j’ai effectués dans localBranch .

edit Outdated, il suffit d’utiliser git push -u origin $BRANCHNAME


Utilisez git publish-branch partir des divers outils Git de William ( repo gitorious et clone ).

OK, pas de rbuy, donc – en ignorant les mesures de protection! – prenez les trois dernières lignes du script et créez un script 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} 

Ensuite, lancez git-publish-branch REMOTENAME BRANCHNAME , où REMOTENAME est généralement d’origine (vous pouvez modifier le script pour prendre l’origine par défaut, etc …)

Pour créer une nouvelle twig en partant d’une twig existante

git checkout -b

puis poussez cette nouvelle twig vers le référentiel en utilisant

git push -u origin

Cela crée et pousse tous les commits locaux vers une nouvelle origin/ twig distante origin/

J’ai créé un alias pour que chaque fois que je crée une nouvelle twig, il pousse et suit la twig distante en conséquence. Je mets le morceau suivant dans le fichier .bash_profile :

 # Create a new branch, push to origin and track that remote branch publishBranch() { git checkout -b $1 git push -u origin $1 } alias gcb=publishBranch 

Utilisation : tapez simplement gcb thuy/do-sth-kool avec thuy/do-sth-kool est mon nouveau nom de twig.

Pour la version de GitLab antérieure à 1.7, utilisez:

git checkout -b name_branch

(name_branch, ex: master)

Pour le transmettre au référentiel distant, faites:

git push -u origin name_new_branch

(name_new_branch, exemple: feature)

En me basant légèrement sur les réponses ici, j’ai intégré ce processus à un simple script Bash, qui pourrait bien sûr être utilisé comme un alias Git.

L’important pour moi est que cela me pousse à exécuter des tests unitaires avant de valider et passe le nom de la twig actuelle par défaut.

 $ git_push_new_branch.sh Have you run your unit tests yet? If so, pass OK or a branch name, and try again usage: git_push_new_branch {OK|BRANCH_NAME} eg git_push_new_branch -> Displays prompt reminding you to run unit tests git_push_new_branch OK -> Pushes the current branch as a new branch to the origin git_push_new_branch MYBRANCH -> Pushes branch MYBRANCH as a new branch to the origin 

git_push_new_branch.sh

 function show_help() { IT=$(CAT <  Displays prompt reminding you to run unit tests git_push_new_branch.sh OK -> Pushes the current branch as a new branch to the origin git_push_new_branch.sh MYBRANCH -> Pushes branch MYBRANCH as a new branch to the origin ) echo "$IT" exit } if [ -z "$1" ] then show_help fi CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD) if [ "$1" == "OK" ] then BRANCH=$CURR_BRANCH else BRANCH=${1:-$CURR_BRANCH} fi git push -u origin $BRANCH 

Pour télécharger votre twig locale d’un référentiel public, vous devez cd au référentiel public, puis utiliser le code suivant:

 git push -u origin branchname