การอ้างอิงสาขาปัจจุบันใน github readme.md


92

ในreadme.mdไฟล์repo github ของฉันฉันมีตรา Travis-CI ฉันใช้ลิงค์ต่อไปนี้:

https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=staging

ปัญหาที่ชัดเจนคือสาขาเป็นฮาร์ดโค้ด เป็นไปได้ไหมที่จะใช้ตัวแปรบางตัวเพื่อให้สาขานั้นเป็นตัวแปรที่กำลังดูอยู่



นอกจากนี้ยังควรทำให้ส่วนที่เก็บเป็นตัวแปรด้วยเพื่อที่ที่เก็บที่แยกส่วนจะไม่รายงานสถานะของที่เก็บต้นฉบับที่แยกออกมาอย่างไม่ถูกต้อง
EoghanM

คำตอบ:


55

ไม่ใช่ว่าฉันรู้
การสนับสนุน GitHubยืนยัน (ผ่านความคิดเห็นของOP Joe Gatt )

วิธีเดียวที่จะทำได้คือส่งลิงค์ผ่านบริการของฉันเองซึ่งจะใช้ส่วนหัวผู้อ้างอิง http ของ github เพื่อพิจารณาว่าสาขาใดถูกอ้างอิงจากนั้นดึงรูปภาพที่เหมาะสมจาก Travis CI

ฉันอยากจะทำตรา Travis-CI หนึ่งอันต่อสาขาเพื่อให้ผู้อ่านเลือกหรือพิจารณาความเหมาะสมเมื่อเห็นไฟล์README.md.


ปรับปรุง 2016 (3 ปีต่อมา): ในขณะที่มีการเปลี่ยนแปลงอะไรในด้าน GitHub, fedorquiรายงานในการแก้ปัญหาที่กล่าวถึงใน " รับโล่เทรวิสบน Github สะท้อนให้เห็นถึงสถานะที่เลือกสาขา " โดยAndrie
เพียงแสดงสาขาทั้งหมดและตรา TravisCI ตามลำดับ

หากคุณมีเพียงสองหรือสามสาขานั่นก็เพียงพอแล้ว


1
ขอบคุณ VonC ฉันติดต่อฝ่ายสนับสนุนของ github ตามที่คุณแนะนำและนี่คือคำตอบของพวกเขา:
Joe Gatt

1
พวกเขายืนยันว่าไม่สามารถทำได้ พวกเขากล่าวว่าวิธีเดียวที่จะทำได้คือส่งลิงค์ผ่านบริการของฉันเองซึ่งจะใช้ส่วนหัวผู้อ้างอิง http ของ github เพื่อพิจารณาว่าสาขาใดถูกอ้างอิงจากนั้นดึงรูปภาพที่เหมาะสมจาก Travis CI ...
Joe Gatt

4
ฉันเพิ่งพยายามส่งลิงค์ผ่านบริการของตัวเอง แต่น่าเสียดายที่ฉันไม่ได้รับHTTP_REFERERเมื่อโหลดรูปภาพจาก README บน GitHub :-(
0xced

3
ดีฉันคิดว่ามันเป็นไปไม่ได้ที่จะบรรลุเพราะSSL พร็อกซีสินทรัพย์
0

2
@fedorqui เท่าที่ทราบยังไม่มีจำหน่าย
VonC

17

ฉันแก้ไขปัญหานี้ด้วย git pre -mit hook ที่เขียนบรรทัด Travis ใน README.md ด้วยสาขาปัจจุบัน ตัวอย่างการใช้งานและโค้ดก่อนคอมมิต (Python) (สำหรับคำถามที่ถาม) อยู่ด้านล่าง

การใช้งาน

dandye$ git checkout -b feature123 origin/master
Branch feature123 set up to track remote branch master from origin.
Switched to a new branch 'feature123'
dandye$ echo "* Feature123" >> README.md 
dandye$ git add README.md 
dandye$ git commit -m "Added Feature123"
Starting pre-commit hook...
Replacing:
    [![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=master)][travis]

with:
    [![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=feature123)][travis]

pre-commit hook complete.
[feature123 54897ee] Added Feature123
 1 file changed, 2 insertions(+), 1 deletion(-)
dandye$ cat README.md |grep "Build Status"
[![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=feature123)][travis]
dandye$ 

รหัส Python สำหรับรหัสก่อนการคอมมิต

dandye$ cat .git/hooks/pre-commit
#!/usr/bin/python
"""
Referencing current branch in github readme.md[1]

This pre-commit hook[2] updates the README.md file's
Travis badge with the current branch. Gist at[4].

[1] http://stackoverflow.com/questions/18673694/referencing-current-branch-in-github-readme-md
[2] http://www.git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
[3] https://docs.travis-ci.com/user/status-images/
[4] https://gist.github.com/dandye/dfe0870a6a1151c89ed9
"""
import subprocess

# Hard-Coded for your repo (ToDo: get from remote?)
GITHUB_USER="joegattnet"
REPO="joegattnet_v3"

print "Starting pre-commit hook..."

BRANCH=subprocess.check_output(["git",
                                "rev-parse",
                                "--abbrev-ref",
                                "HEAD"]).strip()

# String with hard-coded values
# See Embedding Status Images[3] for alternate formats (private repos, svg, etc)

#  [![Build Status](https://travis-ci.org/
#  joegattnet/joegattnet_v3.png?
#  branch=staging)][travis]

# Output String with Variable substitution
travis="[![Build Status](https://travis-ci.org/" \
       "{GITHUB_USER}/{REPO}.png?" \
       "branch={BRANCH})][travis]\n".format(BRANCH=BRANCH,
                                            GITHUB_USER=GITHUB_USER,
                                            REPO=REPO)

sentinel_str="[![Build Status]"

readmelines=open("README.md").readlines()
with open("README.md", "w") as fh:
    for aline in readmelines:
        if sentinel_str in aline and travis != aline:
            print "Replacing:\n\t{aline}\nwith:\n\t{travis}".format(
                   aline=aline,
                   travis=travis)
            fh.write(travis)
        else:
            fh.write(aline)

subprocess.check_output(["git", "add", "README.md" ])

print "pre-commit hook complete."

การรับผู้ใช้ repo และ github นั้นยุ่งยากและค่อนข้างเปราะบางเนื่องจากไม่มีข้อมูลรับรองว่าที่เก็บมาจากไหน คุณสามารถใช้ repo-URL ได้หากคุณพร้อมที่จะอยู่กับความเปราะบาง:REPOurl=subprocess.check_output(['git','config','--local', 'remote.origin.url']).decode()
DrSAR

GITHUB_USER=re.match('.*:([a-zA-Z0-9]*)\/', REPOurl).groups()[0]
DrSAR

REPO=re.match('.*\/([a-zA-Z0-9]*).git', REPOurl).groups()[0]
DrSAR

2
เยี่ยมมากฉันเคยคิดเกี่ยวกับเรื่องนี้ แต่ฉันหวังว่าฉันจะมีตัวแปรเวทย์มนตร์ที่อ้างถึงสาขาปัจจุบันใน github เพื่อไม่ให้ประวัติการกระทำของฉันเกิดมลพิษ
Andy

0

ทางออกที่ดีที่สุดสำหรับฉันคือการสร้างเซิร์ฟเวอร์ที่ฉันส่งแบบสอบถามด้วยชื่อผู้ใช้และชื่อ repo และรับภาพ svg พร้อมสถานะการสร้างสำหรับทุกสาขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.