ไม่ได้อยู่ในพื้นที่เก็บข้อมูลของ Gitแต่เป็นเฉพาะในGitHubโดยเฉพาะฉันจะค้นหาเฉพาะข้อความยืนยันของที่เก็บ / สาขาที่เฉพาะเจาะจงได้อย่างไร
ไม่ได้อยู่ในพื้นที่เก็บข้อมูลของ Gitแต่เป็นเฉพาะในGitHubโดยเฉพาะฉันจะค้นหาเฉพาะข้อความยืนยันของที่เก็บ / สาขาที่เฉพาะเจาะจงได้อย่างไร
คำตอบ:
ในฐานะที่เป็น 2017 มันเป็นฟังก์ชั่นที่รวมอยู่ในGitHub ตัวเอง
ตัวอย่างการค้นหาที่ใช้โดยพวกเขาคือ repo:torvalds/linux merge:false crypto policy
ภาพ GIF จากhttps://github.com/blog/2299-search-commit-messages
คุณเคยสามารถทำสิ่งนี้ได้ แต่ GitHub ได้นำคุณลักษณะนี้ออกในช่วงกลางปี 2013 เพื่อให้บรรลุเป้าหมายในพื้นที่คุณสามารถทำได้:
git log -g --grep=STRING
(ใช้-g
แฟล็กหากคุณต้องการค้นหาสาขาอื่น ๆ และการผูกมัดที่เกี่ยวข้อง)
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
-g
ตั้งค่าสถานะสำหรับกรณีการใช้งานทั่วไป ฉันไม่ได้ดูเรื่องนี้มากเกินไป แต่ด้วย-g
การค้นหาดูเหมือนจะย้อนกลับไปเพียงหนึ่งเดือน git log -g --grep=fix
ในขณะที่อยู่ในdevelop
สาขาของธุรกรรมซื้อคืนที่มี ~ 8,000 คอมมิชชันที่ทอดสองปีกลับไปเท่าที่ 2 กุมภาพันธ์
-g
ธง
อัปเดต (2017/01/05):
GitHub ได้เผยแพร่การอัปเดตที่อนุญาตให้คุณค้นหาภายในยอมรับข้อความจากภายใน UI ของพวกเขา ดูโพสต์บล็อกสำหรับข้อมูลเพิ่มเติม
ฉันมีคำถามเดียวกันและติดต่อใครบางคนเมื่อวานนี้ GitHub:
เนื่องจากพวกเขาเปลี่ยนเครื่องมือค้นหาเป็น Elasticsearch จึงไม่สามารถค้นหาการส่งข้อความโดยใช้ GitHub UI ได้ แต่ฟีเจอร์นั้นอยู่ในสิ่งที่อยากได้ของทีม
น่าเสียดายที่ไม่มีวันที่วางจำหน่ายสำหรับฟังก์ชันนั้น
คำตอบสั้น ๆ คือคุณไม่สามารถค้นหาส่งข้อความโดยตรงบน github.com เว็บไซต์ ในขณะนี้เราขอแนะนำgit grep
โซลูชันท้องถิ่นอื่น ๆ ในหัวข้อนี้ได้เสนอ
ในช่วงเวลาหนึ่ง GitHub ได้เสนอการgit grep
ค้นหาสไตล์ผ่านการยอมรับข้อความสำหรับพื้นที่เก็บข้อมูลเดียว น่าเสียดายที่วิธีการนี้มีการปฏิเสธบริการที่อาจทำให้เซิร์ฟเวอร์ไฟล์ไม่สามารถเข้าถึงได้ ด้วยเหตุผลนี้เราจึงลบgit grep
การค้นหาออก
ประมาณการด้านหลังซองจดหมายในปัจจุบันทำให้จำนวนของความมุ่งมั่นใน GitHub ประมาณ 80 พันล้านเครื่องหมาย แม้ว่าวิศวกรของ Google จะหัวเราะอยู่ด้านหลังของเรานี่เป็นเอกสารจำนวนมากที่จะเก็บไว้ใน ElasticSearch เราชอบที่จะทำให้ชุดข้อมูลนี้ค้นหาได้ แต่มันไม่ใช่โครงการที่ไม่สำคัญ
git diff's
(หมายถึงเนื้อหาของการกระทำไม่ใช่เมตาดาต้าการกระทำ)
สิ่งนี้ถูกลบออกจาก GitHub ฉันใช้:
$git log --all --oneline | grep "search query"
คุณสามารถกรองตามผู้แต่ง:
$git log --all --oneline --author=rickhanlonii | grep "search query"
จากหน้าวิธีใช้เกี่ยวกับการค้นหารหัสดูเหมือนว่ายังไม่สามารถทำได้
คุณสามารถค้นหาข้อความในที่เก็บของคุณรวมถึงความสามารถในการเลือกไฟล์หรือเส้นทางที่จะค้นหา แต่คุณไม่สามารถระบุได้ว่าคุณต้องการค้นหาด้วยคอมมิท
อาจจะแนะนำสิ่งนี้ให้พวกเขาเหรอ?
คุณสามารถทำได้ด้วยที่เก็บข้อมูลที่ Google รวบรวมข้อมูล (ผลลัพธ์จะแตกต่างกันไปตามที่เก็บข้อมูลไปยังที่เก็บข้อมูล)
ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/*/*/commits
ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/*/*/commits/master
ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/twitter/*/commits/master
ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/twitter/some_project/commits
อัปเดตมกราคม 2560 (สองปีต่อมา):
ตอนนี้คุณสามารถค้นหาส่งข้อความได้แล้ว ! (ยังคงอยู่ในสาขาหลักเท่านั้น)
กุมภาพันธ์ 2558: ไม่แน่ใจว่าจะเป็นไปได้โดยพิจารณาจากโครงสร้างพื้นฐานการค้นหาปัจจุบันบนElasticsearch (เปิดตัวในเดือนมกราคม 2013 )
ในฐานะที่เป็นคำตอบ "ภาพวาดจากแหล่งข้อมูลที่น่าเชื่อถือและ / หรือเป็นทางการ" นี่คือบทสัมภาษณ์ที่ทำโดยคน GitHub ที่รับผิดชอบการแนะนำ Elasticsearch ที่ GitHub (สิงหาคม 2556)
Tim Pease : เรามีเอกสารสองประเภทในนั้น: หนึ่งไฟล์เป็นซอร์สโค้ดและอีกอันหนึ่งเป็นที่เก็บ วิธีการทำงานคอมไพล์ก็คือคุณมีภาระผูกพันและคุณมีสาขาสำหรับการกระทำแต่ละอย่าง เอกสารที่เก็บติดตามการคอมมิทล่าสุดสำหรับที่เก็บเฉพาะที่ถูกทำดัชนี เมื่อผู้ใช้ผลักดันการส่งมอบใหม่ถึง Github เราจะดึงเอกสารที่เก็บนั้นจาก elasticsearch จากนั้นเราจะเห็นการกระทำที่ทำดัชนีล่าสุดและจากนั้นเราจะได้รับรายชื่อของไฟล์ทั้งหมดที่ได้รับการแก้ไขหรือเพิ่มหรือลบระหว่างการผลักดันล่าสุดนี้และสิ่งที่เราได้จัดทำดัชนีก่อนหน้านี้ จากนั้นเราสามารถไปข้างหน้าและเพียงแค่อัปเดตเอกสารที่มีการเปลี่ยนแปลง เราไม่จำเป็นต้องทำดัชนีซอร์สโค้ดทั้งหมดใหม่ทุกครั้งที่มีคนกด
Andrew Cholakian: งั้นพวกคุณดัชนีเท่านั้น, ฉันสมมุติว่าเป็นสาขาหลัก
Tim Pease: ถูกต้อง เป็นเพียงหัวหน้าสาขาหลักที่คุณจะเข้าไปที่นั่นและยังคงมีข้อมูลจำนวนมากเอกสารสองพันล้านฉบับ 30 เทราไบต์
Andrew Cholakian: มันใหญ่มาก ๆ
[...]
Tim Pease: ด้วยการผลักดันซอร์สโค้ดดรรชนีที่เป็นขั้นตอนการรักษาตัวเอง
เรามีเอกสารที่เก็บซึ่งติดตามการคอมมิทการจัดทำดัชนีล่าสุด หากเราพลาดเพียงแค่พลาดสามกระทำที่งานเหล่านั้นล้มเหลวความมุ่งมั่นต่อไปที่เข้ามาเรายังคงมองหาความแตกต่างระหว่างการกระทำก่อนหน้านี้ที่เราจัดทำดัชนีและสิ่งที่เราเห็นด้วยการผลักดันใหม่นี้
คุณทำgit diff
และคุณได้รับไฟล์ทั้งหมดที่ได้รับการปรับปรุงลบหรือเพิ่ม คุณสามารถพูดได้ว่า“ โอเคเราต้องลบไฟล์เหล่านี้ เราจำเป็นต้องเพิ่มไฟล์เหล่านี้และทุกอย่าง” มันคือการรักษาตัวเองและนั่นคือวิธีการที่เราใช้กับสถาปัตยกรรมเกือบทั้งหมด
นั่นหมายความว่าไม่ใช่ทุกสาขาของrepo ทั้งหมดจะถูกทำดัชนีด้วยวิธีการนั้น
การค้นหาข้อความคอมมิชชันส่วนกลางไม่พร้อมใช้งานในขณะนี้
และทิมสว่าตัวเองยืนยัน กระทำข้อความยังไม่ได้จัดทำดัชนี
โปรดทราบว่ามันเป็นไปไม่ได้ที่จะได้รับ elasticsearch การจัดทำดัชนีท้องถิ่นของการโคลนท้องถิ่น: ดู "การค้นหาพื้นที่เก็บข้อมูล git ด้วย ElasticSearch "
แต่สำหรับ repo ที่เฉพาะเจาะจงที่ง่ายที่สุดยังคงเป็นโคลนและทำ:
git log --all --grep='my search'
(ตัวเลือกเพิ่มเติมที่ " วิธีค้นหาที่เก็บ Git ด้วยการส่งข้อความ ")
เนื่องจากสิ่งนี้ถูกลบออกจาก GitHub ฉันจึงใช้งานgitk
บน Linux เพื่อทำสิ่งนี้
จากสถานีไปที่พื้นที่เก็บข้อมูลและประเภทของgitk
คุณ
ตรงกลาง GUI มีช่องค้นหา มันมีตัวกรองให้เลือกมากมาย:
ขอบเขต - ประกอบด้วยเส้นทางสัมผัสเพิ่ม / ลบสตริงเปลี่ยนการจับคู่บรรทัด
ประเภทการจับคู่ - แน่นอน / IgnCase / Regexp
ค้นหาช่อง - ทุกช่อง / ข้อความพาดหัว / ความคิดเห็น / คอมมิชชัน
สิ่งนี้ทำงานได้ดีจากภายในEclipseจนกระทั่ง GitHub เพิ่มคุณลักษณะ:
หากคุณมีพื้นที่เก็บข้อมูลในรุ่นท้องถิ่นคุณอาจต้องการลองใช้สคริปต์เชลล์ดิบที่ฉันเขียนเพื่อเปิดหน้า GitHub สำหรับการกระทำทั้งหมดที่ตรงกับคำค้นหาของคุณในแท็บใหม่ในเบราว์เซอร์เริ่มต้นของคุณ:
#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done
เพียงแทนที่https://github.com/RepoOwnerUserName/RepoName/
ด้วย GitHub URL จริงของที่เก็บของคุณให้บันทึกสคริปต์ไว้ที่ใดที่หนึ่ง (เช่นgithubsearch.sh
ทำให้ใช้งานได้chmod +x githubsearch.sh
) และเพิ่มชื่อแทนต่อไปนี้ใน~/.bashrc
ไฟล์ของคุณ:
alias githubsearch='/path/to/githubsearch.sh'
จากนั้นที่ใดก็ได้ในที่เก็บ Git ของคุณเพียงแค่ทำสิ่งนี้ที่เทอร์มินัล:
githubsearch "what you want to search for"
และการกระทำใด ๆ ที่ตรงกับคำค้นหาของคุณ (ไม่คำนึงถึงขนาดตัวพิมพ์) จะมีการเปิดหน้า GitHub ที่เกี่ยวข้องในเบราว์เซอร์ของคุณ (ถูกเตือนว่าหากคำค้นหาของคุณปรากฏขึ้นหลายร้อยครั้งอาจทำให้เบราว์เซอร์ของคุณพังและกิน CPU ของพีซีของคุณชั่วขณะหนึ่ง)