שאלה איך אפשר לדעת איזה סניף מקומי עוקב אחר איזה סניף מרוחק בגית?


אני רוצה לדעת אם יש דרך לדעת איזה סניף מקומי עוקב אחר איזה סניף מרוחק בגית.

אני משתמש בשרת מרוחק אחד, אשר נקרא "מקור".


231
2017-08-27 01:04




תקן אותי אם אני טועה אבל האין זה סניף מרוחק בשם שמוצא על ידי ברירת המחדל ולא השרת ?? - Chris Halcrow


תשובות:


באמצעות הדוגמה של העותק שלי של Puppet הוצא מן הזרם Git upstream על Github.com ...

$ git remote show origin
* remote origin
  Fetch URL: git://github.com/reductivelabs/puppet.git
  Push  URL: git://github.com/reductivelabs/puppet.git
  HEAD branch: master
  Remote branches:
    0.24.x                 tracked
    0.25.x                 tracked
    2.6.x                  tracked
    master                 tracked
    next                   tracked
    primordial-ooze        tracked
    reins-on-a-horse       tracked
    testing                tracked
    testing-17-march       tracked
    testing-18-march       tracked
    testing-2-april        tracked
    testing-2-april-midday tracked
    testing-20-march       tracked
    testing-21-march       tracked
    testing-24-march       tracked
    testing-26-march       tracked
    testing-29-march       tracked
    testing-31-march       tracked
    testing-5-april        tracked
    testing-9-april        tracked
    testing4268            tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

אז אם הייתי לבצע את הפעולות הבאות:

$ git checkout -b local_2.6 -t origin/2.6.x 
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'

ולבסוף להפעיל מחדש את git remote show origin הפקודה שוב אני רואה את הבאים למטה בתחתית:

  Local branches configured for 'git pull':
    local_2.6 merges with remote 2.6.x
    master    merges with remote master

197
2017-08-27 03:03



אז זה אומר שאתה יכול לעקוב אחר כל הענפים מרחוק בובות למרות שיש לך כמה סניפים מקומיים. מה המשמעות של "מעקב" סימנים רבים אתה רואה את התוצאה של הפקודה? "מעקב" על ידי איזה סניף מקומי? - PJ.
את הענפים המרוחקים הם במעקב כי אם אתה עושה git fetch או git pull עדכונים לענפים המרוחקים יתבצע מעקב במאגר המשוכפל שלך. הסניפים המקומיים הם בדיוק כך, הענפים המקומיים של הענפים המרוחקים, ולכן העדכונים לסניפים המרוחקים, יעוקבו וימוזגו כאשר ניתנת הפקודה המתאימה לכך. אני כולל במפורש את האפשרות '-t' בעת ביצוע הסניף המקומי כדי לוודא שהוא עוקב אחר הענף שממנו מקורו. זכור סניף מקומי יכול גם לעקוב אחר סניף מקומי ולכן לא צריך להיות ענף מרוחק. - Jeremy Bouse
@PJ: למונח "מסלול" יש שתי משמעויות ברורות בגיט. השורות "המעוקבות" ב git remote show remote-name מתייחס "ענפי מעקב" (תצלומי ענפים ממאגרים מרוחקים). השורות "מתמזגות עם" מתייחסות לסניפים מקומיים שיש להם "ענף במעלה הזרם" (עם עם --track/-t אופציה של ענף Git או git checkout ולכן לעתים קרובות מבולבל עם "מעקב סניפים"). - Chris Johnsen
"ענף מעקב מרחוק"הוא ערך הזיהוי המעודכן עבור" סניפי מעקב "שהוזכרו לעיל 8b3f3f84. - ento


לכל הענפים:

git branch -avv

עבור סניפים מקומיים בלבד:

git branch -lvv

עבור סניפים מרוחקים בלבד:

git branch -rvv

מראה לך את כל הענפים, כמו גם את שם הסניף במעלה הזרם.


122
2018-02-14 16:02



זה ללא ספק התשובה הפשוטה ביותר ואת מלוא!
על גרסה git 1.7.7.5 זה מראה לי את הסניף המקומי ואת sha-1 הוא מצביע על, אבל זה לא מראה את ענף מרוחק במעקב ... - mpontillo
עובד עבורי על גרסה 1.7.4.1 git. השני 'v' נדרש להציג את ענף המעקב מרחוק. - Peter Johnson
כדי להפחית את התפוקה git branch -lvv להראות רק סניפים מקומיים עם הזרם עשוי להיות שימושי - A B
^git branch -vv עובד בשבילי... - notacouch


ג'רמי בוז מדגים איך git remote show מציג מידע מעקב. זה צריך להיות מספיק אם אתה רק רוצה את המידע עבור הצריכה האנושית.

אם אתה מתכנן להשתמש במידע בהקשר אוטומטי (לדוגמה, סקריפט), עליך להשתמש בדרג התחתון ("אינסטלציה") git for-each-ref במקום זאת.

% git remote show origin
* remote origin
⋮
  Local branches configured for 'git pull':
    master merges with remote master
    pu     merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu

ה git for-each-ref למד את %(upstream) בתוך Git 1.6.3. עם גירסאות מוקדמות יותר של Git יהיה עליך לחלץ את פרטי המעקב git config branch.<name>.remote ו git config branch.<name>.merge (כנראה באמצעות git for-each-ref כדי לבנות את הפקודות עבור כל שם סניף מקומי).


52
2017-08-27 03:18



תשובות התשובות שלך הוא הרבה יותר תמציתי וקל יותר לעקוב, אז אתה מקבל את ההצבעה למעלה :) - CubanX
כדי לעשות את זה פחות תמציתי, אבל מספקים דרך יפה לבדוק ויזואלית כי שמות מרוחקים הם כמו שמות הסניף המקומי, git gotcha נפוץ: באש git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n' - hobs


עבור ענף מסוים, אתה יכול להשתמש git rev-parse עם ה @{u} או @{upstream} סיומת על שם הסניף, למשל:

$  git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master

... או עבור הטופס מקוצר, להוסיף --abbrev-ref

$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master

אתה יכול בדרך כלל להשתמש branch@{upstream} תחביר שבו צפוי להתחייב.


18
2018-05-01 09:18



+1 התשובה שלך נתן לי בדיוק את מה שאני צריך: git rev-parse --symbolic-full-name HEAD לעומת. git rev-parse --symbolic-full-name HEAD@{u}, תודה! - Tino


אני משתמש בתסריט המעטפת הבא (בשם git-tracks) כדי להראות את הסניף המרוחק שעוקב אחר הענף הנוכחי:

#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}

echo "${remote:?}/${remoteBranch:?}"

זה יכול גם להשתמש המוזכר git for-each-ref, אבל מצאתי את הגישה הישירה קצת יותר מסנן את הפלט עבור הסניף הנוכחי.


10
2018-01-21 14:26



מומלץ להשתמש ב "set -e" בראש הסקריפט. זה יאפשר לך להסיר את כל המופעים של "| | לצאת $?" תוך שמירה על אותה התנהגות כושלת. - John Whitley
@JohnWhitley: תודה, ערכתי את התשובה שלי. אני יודע על set -e, אבל בדרך כלל מקל על בדיקה מפורשת. אבל במקרה הזה, זה באמת טוב יותר. - Ingo Karkat
לא עובד בשבילי git version 1.9.4. EHos שום דבר :( - Ain


.git/config הקובץ גם יספק את פרטי הסניף מעקב כמו

[remote "Hub"]
    url = ssh://xxxx/tmp/Hub
    fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
    remote = Hub
    merge = refs/heads/develop
[branch "Dev1"]
    remote = Test
    merge = refs/heads/Dev1
[remote "Test"]
    url = ssh://xxxx/tmp/gittesting/Dev1GIT
    fetch = +refs/heads/*:refs/remotes/Test/*

8
2017-10-11 12:59





git branch -vv

מראה בדיוק מה אתה מבקש. זה מראה את הסניפים המקומיים יחד עם הסניף המרוחק המקביל הם עוקבים.


5
2018-05-07 07:50





הוסף את הרצים האלה ל [alias] של קובץ .gitconfig שלך:

show-tracking = !sh -c 'git ls-remote . |grep `git log -1 --grep="git-svn-id" --format=%H`|perl -pe "s/[[:alnum:]]+[[:space:]]//"'

2
2018-03-07 16:48





הייתי צריך למצוא את הסניף המרוחק המתאים (אם בכלל) עבור כל סניף מקומי בתוך לולאה שפועלת ברשימת הסניפים המקומיים. אני בסופו של דבר באמצעות הבאות:

git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"

זה לא פלט כלום (מחרוזת ריקה) עבור סניפים מקומיים שאין להם סניף מרוחק המקביל ("someremote / somebranch").


0
2017-11-23 00:08





נסה git branch  עם אופציותYou

 -r
List or delete (if used with -d) the remote-tracking branches. 

-a
List both remote-tracking branches and local branches. 

אחרת, בדוק את .git/config.


-1
2017-08-27 01:12



הם מראים ענפים, אבל אני לא מבין איזה מהם הוא מעקב. - PJ.