วิธีบังคับสร้างหน้า GitHub


109

ทุกที่เก็บ GitHub สามารถมี ( หรือเป็น ) เว็บไซต์GitHub Pagesซึ่งสามารถสร้างด้วย Jekyll GitHub สร้างไซต์ทุกครั้งที่คุณส่งคอมมิตใหม่
มีวิธีบังคับให้รีเฟรชเว็บไซต์ Github Pages โดยไม่ต้องกดคอมมิตใหม่หรือไม่?


อาจเป็นไปตามนโยบายแคชหรือไม่ ( stackoverflow.com/a/13106972/6309 )
VonC

2
จริงๆแล้วคุณสามารถติดต่อฝ่ายสนับสนุนของ GitHub เพื่อขอคำยืนยันและโพสต์คำตอบได้ที่นี่ ที่สามารถช่วยคนอื่น ๆ
VonC

1
ตามเอกสารนี้หน้า github จำกัด ไว้ที่ 10 บิลด์ต่อชั่วโมง จากประสบการณ์ของฉันถ้าคุณทำเกินขีด จำกัด บิวด์ใหม่จะไม่ถูกทริกเกอร์แม้ว่าคุณจะดันคอมมิตใหม่ก็ตาม
Jakub Kukul

คำตอบ:


151

จากการสนับสนุน GitHub 2014-06-07:

ขณะนี้ยังไม่สามารถทริกเกอร์การสร้างใหม่ด้วยตนเองได้โดยไม่ต้องกดคอมมิตไปยังสาขาที่เหมาะสม


แก้ไข:

ดังที่แอนดี้ชี้ให้เห็นในความคิดเห็นคุณสามารถผลักดันการกระทำที่ว่างเปล่าด้วยคำสั่ง:

git commit -m 'rebuild pages' --allow-empty
git push origin <branch-name>

แก้ไข 2:

ขอขอบคุณที่การกระทำ GitHub มันค่อนข้างง่ายที่จะก่อให้เกิดรายวันเผยแพร่: https://stackoverflow.com/a/61706020/4548500


3
หากคุณโชคดีเหมือนฉันโปรดตรวจสอบสถานะ Github ด้วยเพราะอาจไม่ทำงานหรือมีปัญหาเกี่ยวกับงาน / งานสร้างพื้นหลัง
f01

tl, drgit log
nilon

20

หากคุณต้องการวิธีแก้ปัญหาสคริปต์ด่วนนี่คือ เพียงทำภารกิจต่อไปนี้เพียงครั้งเดียวและเรียกใช้สคริปต์เมื่อใดก็ตามที่คุณต้องการสร้างหน้า GitHub ของคุณใหม่

1. สร้างโทเค็นการเข้าถึงส่วนบุคคลสำหรับบรรทัดคำสั่ง:

  • ทำตามความช่วยเหลืออย่างเป็นทางการที่นี่เพื่อสร้างโทเค็นการเข้าถึงส่วนบุคคล โดยทั่วไปคุณต้องเข้าสู่ระบบในบัญชีของคุณและ GitHub Settings > Developer settings > Personal access tokens > Generate new tokenไปที่:
  • repoขอบเขตขีด
  • คัดลอกโทเค็น

2. สร้างสคริปต์ต่อไปนี้:

  • สร้างไฟล์ที่เรียกRebuildPage.shและเพิ่มบรรทัด:

    #!/bin/bash
    curl -u yourname:yourtoken -X POST https://api.github.com/repos/yourname/yourrepo/pages/builds
    

    ที่นี่

    • แทนที่yournameด้วยชื่อผู้ใช้ GitHub ของคุณ
    • แทนที่yourtokenด้วยโทเค็นการเข้าถึงส่วนบุคคลที่คุณคัดลอกมา
    • แทนที่yourrepoด้วยชื่อที่เก็บของคุณ

3. เรียกใช้สคริปต์:

  • หากคุณใช้ Windows 10:

    • คุณต้องตั้งค่าWindows Subsystem สำหรับ Linuxหากยังไม่ได้ดำเนินการ ทำตามนี้เพื่อดำเนินการดังกล่าว
    • ลบบรรทัดแรก ( #!/bin/bash) RebuildPage.batจากสคริปต์และบันทึกสคริปต์ที่เป็น (เช่นแทนที่.shด้วย.batในชื่อไฟล์สคริปต์)
    • ทางเลือกอื่นสำหรับจุดข้างต้น: ในการรับคุณสมบัติดับเบิลคลิกเพื่อเรียกใช้.shไฟล์:

      • ตั้งbash.exeเป็นโปรแกรมเริ่มต้นสำหรับ.shไฟล์
      • เปิดและแก้ไขregedit.exe HKEY_CLASSES_ROOT\Applications\bash.exe\shell\open\commandตั้ง(Default)ค่าเป็น:

        "C:\Windows\System32\bash.exe" -c " \"./$(grep -oE '[^\\]+$' <<< '%L')\";"
        
    • ตอนนี้ดับเบิลคลิกที่สคริปต์เมื่อคุณต้องการสร้างหน้า GitHub ของคุณใหม่ เสร็จแล้ว!

  • หากคุณใช้ Linux / Mac การเรียกใช้สคริปต์จะเหมือนกับการเรียกใช้สคริปต์อื่น ๆ เสร็จแล้ว!

หมายเหตุเพิ่มเติมสำหรับการแก้ปัญหา:

โซลูชันนี้ใช้ API ของ GitHub REST API v3 นี่คือเอกสารอย่างเป็นทางการสำหรับ API


7

ฉันมีปัญหานี้มาระยะหนึ่งแล้วและการผลักดันไปยังสาขาหลักไม่ได้เปลี่ยนแปลงอะไรเลยmyapp.github.ioด้วยเหตุผลสองประการ:

1 - สร้าง

ไม่ว่าฉันจะพยายามผลักดันผลงานของตัวเองกี่ครั้งงานสร้างก็ไม่เริ่มต้น ฉันพบวิธีแก้ปัญหาโดยการแก้ไขไฟล์ของฉันในโปรแกรมแก้ไขออนไลน์ของ Github (เปิด index.html ของคุณและแก้ไขบนเว็บไซต์ Github จากนั้นคอมมิต)

2 - ปัญหาการแคช

แม้ว่าจะสร้างสำเร็จแล้ว แต่ฉันก็ยังคงเห็นหน้าเดิมทุกประการmyapp.github.ioและการโหลดซ้ำอย่างหนักCtrl + Shift + Rก็จะไม่สามารถแก้ไขได้ หากใช้ Chrome ให้ตรวจสอบหน้าของคุณเข้าไปที่Applicationแท็บเลือก "ล้างที่เก็บข้อมูล" ในเมนูด้านซ้ายจากนั้นคลิก "ล้างข้อมูลไซต์" ที่ด้านล่างของเมนู


7

ตอนนี้ GitHub Actions พร้อมใช้งานแล้วสิ่งนี้เป็นเรื่องเล็กน้อยที่ต้องทำ:

# File: .github/workflows/refresh.yml
name: Refresh

on:
  schedule:
    - cron:  '0 3 * * *' # Runs every day at 3am

jobs:
  refresh:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger GitHub pages rebuild
        run: |
          curl --fail --request POST \
            --url https://api.github.com/repos/${{ github.repository }}/pages/builds \
            --header "Authorization: Bearer $USER_TOKEN"
        env:
          # You must create a personal token with repo access as GitHub does
          # not yet support server-to-server page builds.
          USER_TOKEN: ${{ secrets.USER_TOKEN }}

ตัวอย่าง repo ที่ทำสิ่งนี้: https://github.com/SUPERCILEX/personal-website/actions

Pages API: https://developer.github.com/v3/repos/pages/#request-a-page-build


5

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

ป้อนคำอธิบายภาพที่นี่

คุณอาจเห็นข้อความว่า "ไซต์ของคุณมีปัญหาในการสร้าง: ไม่สามารถสร้างเพจได้โปรดลองอีกครั้งในภายหลัง"

จากนั้นฉันกำลังตรวจสอบการกระทำล่าสุดของฉันและพยายามหาสาเหตุของปัญหานี้ ในตอนท้ายฉันสามารถแก้ไขปัญหาได้

ป้อนคำอธิบายภาพที่นี่

มีเครื่องหมายจุลภาคเพิ่มเติมในแท็ก (,) และนั่นทำให้เกิดปัญหานี้

ป้อนคำอธิบายภาพที่นี่

คุณจะไม่ได้รับข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องหากมีปัญหาใด ๆ ในไฟล์. md ของคุณ ขอแนะนำให้คุณตรวจสอบสถานะการสร้างและเปรียบเทียบการเปลี่ยนแปลงหากคุณประสบปัญหาเดียวกัน


4

การกระทำที่ว่างเปล่าไม่ได้ผลสำหรับฉัน แต่จากคำตอบของ @benett สิ่งนี้ใช้ได้กับฉัน:

เปิดบุรุษไปรษณีย์สร้างคำขอใหม่ด้วย URL นี้: https://api.github.com/repos/[user_name]/[repo_name]/pages/builds (แทนที่ด้วยชื่อและ repo ของคุณ) และเลือกวิธีการ POST

ก่อนที่คุณจะเรียกใช้ให้ไปที่headersแท็บและเพิ่มคีย์ใหม่ที่Acceptมีค่าapplication/vnd.github.mister-fantastic-preview+json

ตอนนี้คุณสามารถเรียกใช้และเยี่ยมชมเพจของคุณอีกครั้ง


สิ่งนี้ไม่ได้ผลสำหรับฉันฉันเข้าใจ{ "message": "Not Found", "documentation_url": "https://developer.github.com/v3/repos/pages/#request-a-page-build" }แล้ว อาจเป็นเพราะ repo ของฉันเป็นแบบส่วนตัว?
Coburn


0

โซลูชันทางเลือก

คุณอาจได้รับอีเมลจาก GitHub ที่แจ้งว่า Jekyll ไม่ประสบความสำเร็จในการสร้างเว็บไซต์ของคุณเมื่อคุณส่งไปยังgh-pagesไฟล์. หากเป็นกรณีนี้คุณสามารถพยายามบังคับให้พุชทริกเกอร์งานสร้างอื่น

หากคุณใช้โฟลเดอร์เฉพาะสำหรับเว็บไซต์สุดท้ายสมมติว่ามีpublicโฟลเดอร์คุณสามารถลองสร้างโฟลเดอร์ของคุณใหม่และเพิ่มโฟลเดอร์ในการเปลี่ยนแปลงที่คุณกำหนดไว้ หลังจากนั้นคุณจะต้องแยกไฟล์เหล่านั้นออกเป็นgh-pagesสาขาของคุณและบังคับให้พวกเขาทริกเกอร์บิวด์อื่นแม้ว่าไฟล์จะไม่เปลี่ยนแปลงเลยก็ตาม ส่วนที่เหลือของโค้ดร้องเพียงแค่ลบคอมมิตสำหรับpublicโฟลเดอร์เพื่อความสะดวกและลบออกจากระบบไฟล์ในเครื่อง

รหัส

git add public
git commit -am ":bug: triggering another jekyll build"
git push origin $(git subtree split --prefix public master):gh-pages --force
git reset HEAD~1
rm -rf public

เคล็ดลับ

หากมีการเปลี่ยนแปลงที่ไม่ได้รับคำสั่งซึ่งไม่ได้เป็นส่วนหนึ่งของไซต์สุดท้ายคุณสามารถซ่อนไว้โดยใช้คำสั่งต่อไปนี้

git stash

จากนั้นทำตามคำสั่งด้านบนเพื่อบังคับสร้าง Jekyll ด้วยตนเองและปลดล็อก

git stash pop

อ้างอิง

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