create - git remote add




Wie schiebe ich einen neuen lokalen Zweig in ein Remote-Git-Repository und protokolliere es auch? (9)

Ich möchte Folgendes tun können:

  1. Erstellen Sie einen lokalen Zweig basierend auf einem anderen (entfernten oder lokalen) Zweig (über git branch oder git checkout -b ).

  2. Schieben Sie den lokalen Zweig zum Remote-Repository (Publish), machen Sie ihn jedoch nachverfolgbar, sodass git pull und git push sofort funktionieren.

Wie mache ich das?

Ich kenne --set-upstream in Git 1.7, aber das ist eine Aktion nach der Erstellung. Ich möchte einen Weg finden, um eine ähnliche Änderung vorzunehmen, wenn der Zweig in das Remote-Repository verschoben wird.


Aufbauend auf den Antworten habe ich diesen Prozess als einfaches Bash-Skript zusammengefasst, das natürlich auch als Git-Alias ​​verwendet werden kann.

Die wichtige Ergänzung für mich ist, dass dies mich dazu auffordert, Komponententests vor dem Festlegen auszuführen und den aktuellen Zweignamen standardmäßig zu übergeben.

$ 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}

  e.g.

  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 <<EOF

  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}

  e.g.

  git_push_new_branch.sh           -> 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

Eine kleine Variation der hier bereits angegebenen Lösungen:

  1. Erstellen Sie einen lokalen Zweig basierend auf einem anderen (entfernten oder lokalen) Zweig:

    git checkout -b branchname
    
  2. Schieben Sie den lokalen Zweig zum Remote-Repository (Publish), machen Sie ihn jedoch nachverfolgbar, sodass git pull und git push sofort funktionieren

    git push -u origin HEAD
    

    Die Verwendung von HEAD ist eine "praktische Möglichkeit, den aktuellen Zweig auf der Fernbedienung auf denselben Namen zu verschieben". Quelle: https://git-scm.com/docs/git-push In Git ist HEAD (in Großbuchstaben) eine Referenz auf den oberen Teil des aktuellen Zweigs (Baums).

    Die Option -u ist nur kurz für --set-setupstream . Dadurch wird eine Upstream-Verfolgungsreferenz für den aktuellen Zweig hinzugefügt. Sie können dies überprüfen, indem Sie in Ihrer .git / config -Datei nachsehen:


Erstellen eines neuen Zweigs durch Verzweigung vom vorhandenen Zweig

git checkout -b <new_branch>

und dann diesen neuen Zweig mithilfe von in das Repository verschieben

git push -u origin <new_branch>

Dadurch werden alle lokalen Commits erstellt und an einen neu erstellten Remote-Zweig origin/<new_branch>


Ich habe einen Alias ​​erstellt, damit der entfernte Zweig bei jedem Erstellen eines neuen Zweigs entsprechend verschoben und verfolgt wird. Ich habe den folgenden .bash_profile in die .bash_profile Datei .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

Verwendung : gcb thuy/do-sth-kool einfach gcb thuy/do-sth-kool mit thuy/do-sth-kool gcb thuy/do-sth-kool .


Ich nehme an, Sie haben bereits ein Projekt geklont wie:

git clone http://github.com/myproject.git
  1. Erstellen Sie dann in Ihrer lokalen Kopie einen neuen Zweig und checken Sie ihn aus:

    git checkout -b <newbranch>
    
  2. Angenommen, Sie haben auf Ihrem Server ein "git bare --init" erstellt und myapp.git erstellt, sollten Sie:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. Danach sollten Benutzer in der Lage sein

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

HINWEIS: Ich gehe davon aus, dass der Server betriebsbereit ist. Wenn nicht, funktioniert es nicht. Eine gute Anleitung ist here .

HINZUGEFÜGT

Einen entfernten Zweig hinzufügen:

git push origin master:new_feature_name

Prüfen Sie, ob alles in Ordnung ist (Herkunft abrufen und entfernte Zweige auflisten):

git fetch origin
git branch -r

Erstellen Sie einen lokalen Zweig und verfolgen Sie den entfernten Zweig:

git checkout -tb new_feature_name origin/new_feature_name

Aktualisiere alles:

git pull

In Git 1.7.0 und höher können Sie einen neuen Zweig auschecken:

git checkout -b <branch>

Dateien bearbeiten, hinzufügen und festschreiben. Dann drücken Sie die Option -u (kurz für --set-upstream ) :

git push -u origin <branch>

Git wird die Tracking-Informationen während des Push-Vorgangs einrichten.


Veraltet, verwenden Sie einfach git push -u origin $BRANCHNAME

Verwenden Sie git publish-branch von Williams verschiedenen Git-Tools ( gitorious repo und clone ).

OK, kein Ruby, also die Sicherheitsmaßnahmen ignorieren! - Nehmen Sie die letzten drei Zeilen des Skripts und erstellen Sie ein Bash-Skript, 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}

Führen Sie dann git-publish-branch REMOTENAME BRANCHNAME , wobei REMOTENAME normalerweise origin ist (Sie können das Skript so ändern, dass es den Standard als Ursprung annimmt, usw.).


Verwenden Sie für die GitLab-Version vor 1.7 Folgendes:

git checkout -b name_branch

(name_branch, ex: master)

Um es in das Remote-Repository zu verschieben, führen Sie folgende Schritte aus:

git push -u origin name_new_branch

(name_new_branch, Beispiel: feature)


Wenn Sie Ihr Repo nicht mit anderen teilen, ist dies nützlich, um alle Ihre Zweige zur Remote- --set-upstream und --set-upstream Tracking für Sie richtig zu machen:

git push --all -u

(Nicht genau das, wonach das OP gefragt hat, aber dieser One-Liner ist ziemlich beliebt.)

Wenn Sie Ihr Repo mit anderen teilen, ist dies keine wirklich gute Form, da Sie das Repo mit all Ihren zwielichtigen experimentellen Zweigen verstopfen.





git-push