ฉันจะค้นหาข้อความยืนยันใน GitHub ได้อย่างไร


328

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


3
repo เป็นสาธารณะหรือส่วนตัว?

2
วิธีการเกี่ยวกับการค้นหาข้อความกระทำในส้อมทั้งหมดหรือไม่ พยายามหลีกเลี่ยงการสร้างวงล้อใหม่เมื่อที่เก็บหลักมีส้อมมากกว่า 100+!
Daniel Sokolowski

การเปลี่ยนแปลงใด ๆ ตั้งแต่นั้นมา?
Pavel Šimerda

ฉันต้องการค้นหาเครือข่ายที่มุ่งมั่น
frumbert

คำตอบ:


68

ในฐานะที่เป็น 2017 มันเป็นฟังก์ชั่นที่รวมอยู่ในGitHub ตัวเอง

ตัวอย่างการค้นหาที่ใช้โดยพวกเขาคือ repo:torvalds/linux merge:false crypto policy

ป้อนคำอธิบายรูปภาพที่นี่ ภาพ GIF จากhttps://github.com/blog/2299-search-commit-messages


ฉันได้รับข้อผิดพลาดในการอนุญาตเมื่อค้นหา repo ส่วนตัวที่ฉันมีสิทธิ์เข้าถึงแบบอ่าน / เขียน
anon58192932

1
ฉันเฝ้าดูมาห้านาทีแล้วและไม่สามารถรู้ได้ว่าเมาส์ไปทางไหนหลังจากที่มันซูมลงและไปทางขวา
Kevin Krumwiede

1
@KevinKrumwiede อาจจะเป็นปุ่ม "หยุดการบันทึก" haha
Corey Cole

ฉันยอมแพ้และใช้ "บันทึก git - all - grep = searhterm"
Edwin Evans

206

คุณเคยสามารถทำสิ่งนี้ได้ แต่ 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.

143
ทำไมพวกเขาถึงเอามันออกไป? นั่นเป็นคุณสมบัติที่มีประโยชน์จริงๆ
Josh Brown

1
ปัจจัย Mystic: I.want.spaces.in.this.string มักจะพอเพียง
dbrower

11
เคล็ดลับละเว้นการ-gตั้งค่าสถานะสำหรับกรณีการใช้งานทั่วไป ฉันไม่ได้ดูเรื่องนี้มากเกินไป แต่ด้วย-gการค้นหาดูเหมือนจะย้อนกลับไปเพียงหนึ่งเดือน git log -g --grep=fixในขณะที่อยู่ในdevelopสาขาของธุรกรรมซื้อคืนที่มี ~ 8,000 คอมมิชชันที่ทอดสองปีกลับไปเท่าที่ 2 กุมภาพันธ์
Dan Dascalescu

1
@DanDascalescu แปลกฉันสามารถหาคอมมิชชันที่ต้องย้อนกลับไปอย่างน้อย 5 เดือนด้วย-gธง
Chrispy

134

อัปเดต (2017/01/05):

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


ฉันมีคำถามเดียวกันและติดต่อใครบางคนเมื่อวานนี้ GitHub:

เนื่องจากพวกเขาเปลี่ยนเครื่องมือค้นหาเป็น Elasticsearch จึงไม่สามารถค้นหาการส่งข้อความโดยใช้ GitHub UI ได้ แต่ฟีเจอร์นั้นอยู่ในสิ่งที่อยากได้ของทีม

น่าเสียดายที่ไม่มีวันที่วางจำหน่ายสำหรับฟังก์ชันนั้น


7
+1 คุณได้ช่วยฉันไม่มีเวลาใน GitHub สงสัยว่าจะบรรลุสิ่งที่ฉันควรจะเป็นส่วนหนึ่งของการทำงานที่ชัดเจน ดังนั้นตอนนี้เราต้องโคลน repo ภายในเพื่อ grep ผ่านบรรทัดคำสั่งแทน Jeez นั่นคือความคืบหน้าใช่มั้ย! ;)
McNab

68
แม้แต่การค้นหาขั้นสูงของพวกเขาใน Web UI ก็ไม่อนุญาตให้ทำการค้นหาในฟิลด์ที่สำคัญที่สุดนั่นคือข้อความการส่งจริง นั่นเป็น IMO ที่ไร้สาระอย่างแน่นอน Github ทำหน้าที่ของคุณร่วมกัน!
Brad Thomas

22
ใช่. ลืมความจริงที่ว่าพวกเขาได้สร้างบริการเว็บที่ช่วยในการปฏิวัติและเป็นที่นิยมซอฟต์แวร์โอเพนซอร์ซข้อเท็จจริงที่ว่าพวกเขาไม่มีคุณสมบัตินี้ทำให้มันกลายเป็นเรื่องหลอกลวงอย่างสมบูรณ์!
Jon Cairns

12
ขอบคุณที่สละเวลาในการเผยแพร่เนื้อหาของวาทกรรมของคุณกับ GitHub ในที่สาธารณะที่หาได้ง่าย มันไร้สาระที่นี่เป็นวิธีเดียวที่ประชาชนทั่วไปจะได้รับข้อมูลดังกล่าว - มันโง่อย่างยิ่งสำหรับ GitHub ที่จะไม่มีตัวติดตามปัญหาสาธารณะ - แต่ในที่ที่มีความโง่เขลาเช่นนี้สิ่งที่คุณทำที่นี่เป็นวิธีที่มีประโยชน์ในการป้องกันหลายร้อย คนอื่น ๆ จากการสูญเสียเวลาในการส่งคำขอเดียวกัน ขอบคุณสำหรับผลผลิตหลายร้อยชั่วโมงคนที่คุณได้บันทึกไว้
Mark Amery

1
ไม่ดีไปกว่าตัวติดตามสาธารณะของ Atlasian ซึ่งเต็มไปด้วยปัญหาอายุ 7 ปีที่เปิดใช้งานด้วย 1,000 upvotes ...
Askdesigners

58

คำตอบสั้น ๆ คือคุณไม่สามารถค้นหาส่งข้อความโดยตรงบน github.com เว็บไซต์ ในขณะนี้เราขอแนะนำgit grepโซลูชันท้องถิ่นอื่น ๆ ในหัวข้อนี้ได้เสนอ

ในช่วงเวลาหนึ่ง GitHub ได้เสนอการgit grepค้นหาสไตล์ผ่านการยอมรับข้อความสำหรับพื้นที่เก็บข้อมูลเดียว น่าเสียดายที่วิธีการนี้มีการปฏิเสธบริการที่อาจทำให้เซิร์ฟเวอร์ไฟล์ไม่สามารถเข้าถึงได้ ด้วยเหตุผลนี้เราจึงลบgit grepการค้นหาออก

ประมาณการด้านหลังซองจดหมายในปัจจุบันทำให้จำนวนของความมุ่งมั่นใน GitHub ประมาณ 80 พันล้านเครื่องหมาย แม้ว่าวิศวกรของ Google จะหัวเราะอยู่ด้านหลังของเรานี่เป็นเอกสารจำนวนมากที่จะเก็บไว้ใน ElasticSearch เราชอบที่จะทำให้ชุดข้อมูลนี้ค้นหาได้ แต่มันไม่ใช่โครงการที่ไม่สำคัญ


2
+1 ดูเหมือนว่าจะยืนยันสิ่งที่ฉันคิดว่าเขียนคำตอบของฉัน : ข้อความการส่งมอบไม่ได้จัดทำดัชนี: คุณกำลังทำงานกับการจัดทำดัชนีgit diff's(หมายถึงเนื้อหาของการกระทำไม่ใช่เมตาดาต้าการกระทำ)
VonC

ปุ่ม "ข้ามไปยังการส่ง" เป็นอย่างไร ขณะนี้สามารถเข้าถึงได้จาก URL - stackoverflow.com/a/12214817/817632แต่ไม่มีอินเทอร์เฟซสำหรับมัน (ไม่ใช่ที่ฉันรู้) ใช้กรณี - ค้นหาแฮชการคอมมิทที่ใดที่หนึ่งใน bower.json แทนที่จะเป็นเวอร์ชันและต้องการดูว่าการคอมมิชชันนี้ทำอะไรกันแน่ มันจะประหยัดเวลา googling
Olga

44

สิ่งนี้ถูกลบออกจาก GitHub ฉันใช้:

$git log --all --oneline | grep "search query"

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

คุณสามารถกรองตามผู้แต่ง:

$git log --all --oneline --author=rickhanlonii | grep "search query"

3
สิ่งนี้ใช้ได้สำหรับฉัน แต่คำตอบที่ไม่ได้รับการตอบกลับมากที่สุดไม่ได้
makdad

21

จากหน้าวิธีใช้เกี่ยวกับการค้นหารหัสดูเหมือนว่ายังไม่สามารถทำได้

คุณสามารถค้นหาข้อความในที่เก็บของคุณรวมถึงความสามารถในการเลือกไฟล์หรือเส้นทางที่จะค้นหา แต่คุณไม่สามารถระบุได้ว่าคุณต้องการค้นหาด้วยคอมมิท

อาจจะแนะนำสิ่งนี้ให้พวกเขาเหรอ?


18
ดูเหมือนว่าจะเป็นกรณีการใช้งาน "เริ่มต้น" ที่มากกว่าเมื่อพูดถึงการค้นหาผ่าน repo โดยเฉพาะอย่างยิ่งสำหรับคนที่รู้จักที่เก็บใหม่ที่มีภาระผูกพันมากมาย พวกเขาควรพิจารณาเพิ่มสิ่งนี้อย่างแน่นอน
Jose Browne

19

คุณสามารถทำได้ด้วยที่เก็บข้อมูลที่ Google รวบรวมข้อมูล (ผลลัพธ์จะแตกต่างกันไปตามที่เก็บข้อมูลไปยังที่เก็บข้อมูล)

ค้นหาที่เก็บข้อมูลที่รวบรวมข้อมูลทั้งหมดสำหรับ "ใบอนุญาตเปลี่ยน"

ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/*/*/commits

ค้นหาสาขาหลักของที่เก็บข้อมูลที่รวบรวมข้อมูลทั้งหมดสำหรับ "ใบอนุญาตเปลี่ยน":

ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/*/*/commits/master

ค้นหาสาขาหลักของที่เก็บข้อมูลตัวสั่นด้วยความตื่นเต้นทั้งหมดสำหรับ "ใบอนุญาตเปลี่ยน"

ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/twitter/*/commits/master

ค้นหาคลังเก็บ twitter / some_project ทุกสาขาสำหรับ "เปลี่ยนใบอนุญาต"

ไซต์ "เปลี่ยนใบอนุญาต": https://github.com/twitter/some_project/commits


4
@DZenBot ถ้าไม่ใช่ repo สาธารณะคุณคงมีสำเนาโลคอล grep อยู่แล้วฉันแค่ใส่คำตอบนี้สำหรับผู้ที่ไม่ต้องการโคลน repo สาธารณะทั้งหมดเพื่อหาว่าเกิดอะไรขึ้นบ้าง ฉันใช้เป็นส่วนใหญ่ในการค้นหาความมุ่งมั่นที่ลบการสนับสนุนสำหรับรุ่น gtk รุ่นเก่าหรือเมื่อใบอนุญาตเปลี่ยนเป็น gpl3
technosaurus

15

อัปเดตมกราคม 2560 (สองปีต่อมา):

ตอนนี้คุณสามารถค้นหาส่งข้อความได้แล้ว ! (ยังคงอยู่ในสาขาหลักเท่านั้น)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


กุมภาพันธ์ 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 ด้วยการส่งข้อความ ")


7

เนื่องจากสิ่งนี้ถูกลบออกจาก GitHub ฉันจึงใช้งานgitkบน Linux เพื่อทำสิ่งนี้

จากสถานีไปที่พื้นที่เก็บข้อมูลและประเภทของgitkคุณ

ตรงกลาง GUI มีช่องค้นหา มันมีตัวกรองให้เลือกมากมาย:

แถบค้นหา

ขอบเขต - ประกอบด้วยเส้นทางสัมผัสเพิ่ม / ลบสตริงเปลี่ยนการจับคู่บรรทัด

ประเภทการจับคู่ - แน่นอน / IgnCase / Regexp

ค้นหาช่อง - ทุกช่อง / ข้อความพาดหัว / ความคิดเห็น / คอมมิชชัน



4

หากคุณมีพื้นที่เก็บข้อมูลในรุ่นท้องถิ่นคุณอาจต้องการลองใช้สคริปต์เชลล์ดิบที่ฉันเขียนเพื่อเปิดหน้า 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 ของพีซีของคุณชั่วขณะหนึ่ง)


0

ตั้งแต่กลางปี ​​2019 เพียงพิมพ์สิ่งที่คุณต้องการค้นหาในช่องค้นหาด้านซ้ายบนแล้วคลิก "คอมมิท"

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

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