git - मैं एक नई स्थानीय शाखा को रिमोट गिट भंडार में कैसे दबा सकता हूं और इसे ट्रैक भी कर सकता हूं?




repository git-branch (9)

मैं निम्नलिखित करने में सक्षम होना चाहता हूं:

  1. किसी अन्य (दूरस्थ या स्थानीय) शाखा ( git branch या git checkout -b माध्यम से) के आधार पर एक स्थानीय शाखा बनाएं

  2. स्थानीय शाखा को रिमोट रिपोजिटरी (प्रकाशित) पर पुश करें, लेकिन इसे ट्रैक करने योग्य बनाएं ताकि git pull और git push तुरंत काम करेगा।

मैं उसको कैसे करू?

मैं गिट 1.7 में सेट --set-upstream बारे में जानता हूं, लेकिन यह एक सृजनशील कार्रवाई है। मैं दूरस्थ भंडार में शाखा को दबाते समय एक समान परिवर्तन करने का एक तरीका खोजना चाहता हूं।


1.7 से पहले गिटलैब संस्करण के लिए, उपयोग करें:

git checkout -b name_branch

(name_branch, पूर्व: मास्टर)

इसे दूरस्थ भंडार में धक्का देने के लिए, करें:

git push -u origin name_new_branch

(name_new_branch, उदाहरण: सुविधा)


गिट 1.7.0 और बाद में, आप एक नई शाखा की जांच कर सकते हैं:

git checkout -b <branch>

फाइलें संपादित करें, जोड़ें और प्रतिबद्ध करें। फिर -u (लघु --set-upstream लिए छोटा) विकल्प के साथ दबाएं :

git push -u origin <branch>

गिट पुश के दौरान ट्रैकिंग जानकारी स्थापित करेगा।


पुराने संपादित करें , बस git push -u origin $BRANCHNAME

विलियम के विविध गिट टूल्स ( गिटोरियस रेपो और clone ) से git publish-branch प्रयोग करें।

ठीक है, कोई रूबी नहीं, तो - सुरक्षा उपायों को अनदेखा कर रहा है! - स्क्रिप्ट की आखिरी तीन पंक्तियां लें और एक बैश स्क्रिप्ट बनाएं, 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}

फिर git-publish-branch REMOTENAME BRANCHNAME , जहां REMOTENAME आमतौर पर मूल होता है (आप डिफ़ॉल्ट रूप से मूल लेने के लिए स्क्रिप्ट को संशोधित कर सकते हैं, आदि ...)


बस एक नई स्थानीय शाखा बनाने के लिए, डाल दें:

git branch <branch-name>

इसे दूरस्थ भंडार में धक्का देने के लिए, करें:

git push -u origin <branch-name>

मैं बस करता हूँ

git push -u origin localBranch:remoteBranchToBeCreated

पहले से ही क्लोन परियोजना पर।

गिट ने remoteBranchToBeCreated ब्रांच में remoteBranchToBeCreated गए मेरे remoteBranchToBeCreated तहत remoteBranchToBeCreated नाम की एक नई शाखा localBranch


मैंने उपनाम बनाया ताकि जब भी मैं एक नई शाखा बनाउंगा, तो वह तदनुसार रिमोट शाखा को धक्का देगी और ट्रैक करेगा। मैं .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

उपयोग : gcb thuy/do-sth-kool साथ gcb thuy/do-sth-kool टाइप करें, मेरी नई शाखा का नाम है।


यदि आप दूसरों के साथ अपना रेपो साझा नहीं कर रहे हैं, तो यह आपकी सभी शाखाओं को रिमोट, और --set-upstream ट्रैकिंग को आपके लिए सही ढंग से ट्रैक करने के लिए उपयोगी है:

git push --all -u

(ओपी बिल्कुल क्या नहीं पूछ रहा था, लेकिन यह एक लाइनर बहुत लोकप्रिय है)

यदि आप दूसरों के साथ अपना रेपो साझा कर रहे हैं तो यह वास्तव में अच्छा रूप नहीं है क्योंकि आप अपने सभी डोडी प्रयोगात्मक शाखाओं के साथ रेपो को दबाएंगे।


यहां उत्तरों पर थोड़ा सा निर्माण, मैंने इस प्रक्रिया को एक साधारण बैश स्क्रिप्ट के रूप में लपेट लिया है, जिसे निश्चित रूप से गिट उपनाम के रूप में भी इस्तेमाल किया जा सकता है।

मेरे लिए महत्वपूर्ण जोड़ यह है कि यह मुझे मौजूदा शाखा नाम में डिफ़ॉल्ट रूप से काम करने और पास करने से पहले यूनिट परीक्षण चलाने के लिए प्रेरित करता है।

$ 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

git push -u के परिचय से पहले, आप जो चाहते हैं उसे प्राप्त करने के लिए कोई git push विकल्प नहीं था। आपको नए कॉन्फ़िगरेशन स्टेटमेंट जोड़ना था।

यदि आप इसका उपयोग करके एक नई शाखा बनाते हैं:

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

आप सीधे .git/config फ़ाइल को संपादित करने से बचने के लिए git config कमांड का उपयोग कर सकते हैं।

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

या आप मैन्युअल रूप से .git/config फ़ाइल को इस शाखा में ट्रैकिंग जानकारी रखने के लिए संपादित कर सकते हैं।

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






git-push