ไม่สนใจไดเรกทอรี 'bin' ใด ๆ ในโครงการคอมไพล์


1236

ฉันมีโครงสร้างไดเรกทอรีเช่นนี้

.git/
.gitignore
main/
  ...
tools/
  ...
...

ภายใน main และ tools และไดเร็กตอรี่อื่น ๆ ที่ระดับใดก็สามารถมีไดเรคทอรี 'bin' ซึ่งฉันต้องการข้าม ฉันได้ลองแต่ละรูปแบบเหล่านี้ในรูปแบบ. gignignore แต่ไม่มีรูปแบบใดที่ทำงาน:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

ใครช่วยฉันออกได้บ้าง รูปแบบแรก (ที่ฉันคิดว่าควรจะใช้งานได้) ใช้ได้ผลดีถ้าฉันทำสิ่งนี้:

/main/**/bin/**/*

แต่ฉันไม่ต้องการที่จะมีรายการสำหรับทุกไดเรกทอรีระดับบนสุดและฉันไม่ต้องการที่จะแก้ไข. gignignore ทุกครั้งที่ฉันเพิ่มใหม่

นี่คือบน Windows โดยใช้ msysgit ล่าสุด

แก้ไข: อีกสิ่งหนึ่งมีไฟล์และไดเรกทอรีที่มีสตริงย่อย 'bin' ในชื่อของพวกเขาฉันไม่ต้องการที่จะถูกละเว้น :)


14
บางคนอาจพบว่ามีประโยชน์: ถ้าคุณมีที่เก็บน้อยและแต่ละคนมีไฟล์. gitignore เหมือนกันคุณสามารถใส่มันลงในตำแหน่ง "ทั่วไป" และเปิดใช้> git config --global core.excludesfile ~ / .gitignore_global พารามิเตอร์สุดท้ายคือพา ธ ไปยังตำแหน่งทั่วไป ป.ล. ฉันยังใหม่ต่อการคอมไพล์และไม่แน่ใจว่าเป็นคำแนะนำที่ดีที่สุด ดังนั้นโปรดแจ้งให้เราทราบหากคุณไม่ต้องการทำเช่นนั้น ขอบคุณ.
Budda

**ไวยากรณ์ดูเหมือนว่าตอนนี้ (มีนาคม 2013 git 1.8.2) เอกสารอย่างเป็นทางการ: เห็นคำตอบของฉันด้านล่าง
VonC

2
หากใครต้องการที่จะอ่านรุ่นขึ้นไปวันที่มากที่สุดของหน้าคู่มือที่เกิดขึ้นจริงให้ดูgitignore (5) หน้าคู่มือการใช้งาน

ตัวเลือกที่เป็นมิตรถ้าคุณเบื่อการอ่านการเขียนเรียงความสำหรับมูลค่าหนึ่งบรรทัดของข้อมูลatlassian.com/git/tutorials/saving-changes/...
suazithustra

คำตอบ:


1834

ก่อนที่รุ่น 1.8.2, **ไม่ได้มีความหมายพิเศษใด ๆ .gitignoreใน ตั้งแต่ 1.8.2 git รองรับ**หมายถึงศูนย์ย่อยหรือมากกว่าไดเรกทอรีย่อย (ดูบันทึกประจำรุ่น )

วิธีละเว้นไดเรกทอรีทั้งหมดที่เรียกว่า bin ที่ใดก็ตามที่ต่ำกว่าระดับปัจจุบันในแผนผังไดเรกทอรีอยู่กับ.gitignoreไฟล์ที่มีรูปแบบ:

bin/

ในmanหน้านี้มีตัวอย่างของการข้ามไดเรกทอรีที่เรียกว่าfooใช้รูปแบบอะนาล็อก

แก้ไข: หากคุณมีโฟลเดอร์ถังขยะอยู่แล้วในดัชนี git ที่คุณไม่ต้องการติดตามอีกต่อไปคุณต้องลบออกอย่างชัดเจน Git จะไม่หยุดเส้นทางการติดตามที่ถูกติดตามเพียงเพราะตอนนี้พวกเขาตรงกับ.gitignoreรูปแบบใหม่ ดำเนินการลบโฟลเดอร์ ( rm ) จากดัชนีเท่านั้น (- แคช ) recursivelly ( -r ) ตัวอย่างบรรทัดคำสั่งสำหรับโฟลเดอร์ root bin:

git rm -r --cached bin

72
เริ่มต้นด้วย git 1.8.2, git จะยอมรับ**ใน.gitignoreไฟล์ (แหล่งที่มา: 1.8.2 changelog )
Carlos Campderrós

15
เป็นbinเหมือนกันbin/?
Nisba

29
@Nisba พวกเขาแตกต่างกันbinจะไม่สนใจไฟล์ที่ชื่อว่า bin ในขณะที่bin/สำหรับไดเรกทอรีที่ชื่อ bin
Rani Kheir

8
ตั้งแต่ผมลดลงมากกว่านี้: ชื่อโฟลเดอร์ในคอมไพล์คำสั่งเป็นกรณีที่สำคัญ :) "bin = Bin!" - บางทีฉันว่างคนไม่กี่นาทีโดยคำแนะนำนี้ :)
DBA

1
ใน windows10 คุณไม่สามารถสร้างไฟล์. gitignore ได้คุณต้องสร้าง gitignore.txt จากนั้นเรียกใช้ ren gitignore.txt. gitignore ใน command prompt เพื่อสร้างไฟล์นี้
shabby

463

.gitignoreในฝันของคุณน่าจะเป็น:

bin/

ในระดับบนสุด


ขอบคุณมากสำหรับความช่วยเหลือคุณอย่าลืมชำระเงินตัวอย่างไฟล์ที่ละเว้น: git checkout bin *
Chris Sim

1
ใส่ไว้ใน gitignore_global
μολὼν.λαβέ

@GAlexander เหตุใดจึงต้องการละเว้น bin / ไดเรกทอรีทั่วโลก พวกเขามักจะมีเนื้อหาที่เป็นเวอร์ชั่น และการละเว้นทั่วโลกจะไม่ส่งผลกระทบต่อผู้ใช้คนอื่น ๆ ของที่เก็บ
Michael Krelin - แฮ็กเกอร์

234

ฉันคิดว่ามันคุ้มค่าที่จะพูดถึงสำหรับผู้เริ่มต้นคอมไพล์:

หากคุณมีแฟ้มตรวจสอบในและคุณต้องการที่จะไม่สนใจมันGit จะไม่ละเว้นไฟล์ถ้าคุณเพิ่มกฎในภายหลัง ในกรณีเหล่านั้นคุณต้องยกเลิกการติดตามไฟล์ก่อนโดยรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:

git rm --cached

ดังนั้นหากคุณต้องการเพิ่มเพื่อละเว้นบางไดเรกทอรีในพื้นที่เก็บข้อมูลในเครื่องของคุณ (ซึ่งมีอยู่แล้ว) หลังจากแก้ไข. gitignore คุณต้องการเรียกใช้สิ่งนี้บน root dir

git rm --cached -r .
git add .

มันจะ 'รีเฟรช' โดยทั่วไป repo ในเครื่องของคุณและไฟล์ที่ไม่มีการละเว้น

ดู:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/


ถ้าฉันทำตามปกติฉันจะgit add -Aใช้สิ่งนี้แทนได้หรือไม่? และฉันสามารถแทนที่จุดด้วย -A ในบรรทัดแรกด้วยได้หรือไม่
ajax333221

69

สิ่งที่**ไม่เคยทำงานได้ถูกต้องมาก่อน แต่ตั้งแต่git 1.8.2 (8 มีนาคม 2013)ดูเหมือนว่าจะมีการกล่าวถึงและสนับสนุนอย่างชัดเจน:

รูปแบบใน.gitignoreและ.gitattributesไฟล์สามารถมี**/รูปแบบที่ตรงกับไดเรกทอรีย่อย 0 ระดับขึ้นไป

เช่น " foo/**/bar" จับคู่ " bar" ใน " foo" ตัวเองหรือในไดเรกทอรีย่อยของ " foo"

ในกรณีของคุณนั่นหมายความว่าตอนนี้อาจรองรับสายนี้:

/main/**/bin/

46
[Bb]in/

จับคู่ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก


2
[B]in/เป็นตัวพิมพ์ใหญ่เท่านั้น
Gank

วิธีการปล่อยให้Binโฟลเดอร์เพิกเฉยและให้binคอมมิตกับคอมไพล์เท่านั้น? [B]in/ทั้งสองจะกระทำBinและbin.
Gank

4
สิ่งนี้ควรทำ @Gank: Bin/ !bin/
Marco G

34

ฉันไม่เห็นมันพูดถึงที่นี่ แต่ดูเหมือนจะเป็นแบบตรงตามตัวพิมพ์ใหญ่ - เล็ก เมื่อฉันเปลี่ยนเป็น / Bin ไฟล์จะถูกละเว้นตามที่คาดไว้


3
นี้ไม่ได้เป็นคำตอบให้กับคำถามเดิมซึ่งเป็นอย่างชัดเจนเกี่ยวกับไม่bin Bin
CB Bailey

49
แม้ว่าจะไม่ใช่คำตอบ แต่มันก็เพิ่มความสมบูรณ์ให้กับผู้อื่นที่ค้นหาในประเด็นเดียวกัน (ตอนนี้ฉันเอง)
Jay

25

[Bb]in จะแก้ปัญหา แต่ ... นี่คือรายการสิ่งที่คุณควรมองข้าม (รายการตัวอย่างโดย GitExtension):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

3
หมายเหตุ: สิ่งนี้ควรอยู่ใน gitignore ของ GLOBAL (โดยปกติคือในโฮมไดเร็กตอรี่ของคุณ) gitignore ของโครงการควรละเว้นสิ่งที่เฉพาะเจาะจงกับโครงการของคุณเท่านั้น (เช่นไฟล์. o สำหรับแอป C)
BraveNewCurrency

18

หากคุณกำลังมองหา.gitignoreไฟล์ระดับโลกที่ยอดเยี่ยมสำหรับโซลูชัน Visual Studio (.NET) ใด ๆ - ฉันแนะนำให้คุณใช้ตัวนี้: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK นั้นครอบคลุมมากที่สุด.gitignoreสำหรับโครงการ. NET


5
นี่ไม่ได้ตอบคำถามจริงๆ แต่เป็นสิ่งที่ฉันกำลังมองหา
เดฟ

18

ขั้นตอนที่ 1: เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์. gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

ขั้นตอนที่ 2: ตรวจสอบให้แน่ใจว่ามีผลบังคับใช้

หากปัญหายังคงมีอยู่นั่นเป็นเพราะการตั้งค่าใน. gitignoreสามารถเพิกเฉยต่อไฟล์ที่ไม่ได้ติดตามในตอนแรกเท่านั้น หากไฟล์บางไฟล์ได้รวมอยู่ในระบบควบคุมเวอร์ชันแล้วการแก้ไข. gitignoreนั้นไม่ถูกต้อง ในการแก้ปัญหานี้อย่างสมบูรณ์คุณต้องเปิดGit BashหรือPackage Manager Console (ดูภาพหน้าจอด้านล่าง) เพื่อเรียกใช้คำสั่งต่อไปนี้ในโฟลเดอร์ root ของที่เก็บ

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

คอนโซล PM จากนั้นปัญหาจะได้รับการแก้ไขอย่างสมบูรณ์


8

แท้จริงไม่มีคำตอบที่ได้ผลจริงสำหรับฉัน; สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือ (บน Linux):

**/bin
(yes without the / in the end)

git version 2.18.0 

ที่ไม่สนใจโฟลเดอร์ทั้งหมดที่มีชื่อbinในไดเรกทอรีย่อยเช่นกัน?
เถาวัลย์

5

เป็นการบอกกล่าว;

หากคุณคิดว่า.gitignoreไม่ทำงานในทางใดทางหนึ่ง (ดังนั้นให้เพิ่มfoo/*โฟลเดอร์เข้าไป แต่git statusยังคงแสดงเนื้อหาของโฟลเดอร์นั้นว่ามีการดัดแปลงหรืออะไรทำนองนี้) จากนั้นคุณสามารถใช้คำสั่งนี้

git checkout -- foo/*


3

สำหรับ 2.13.3 เป็นต้นไปการเขียนเพียง bin ในไฟล์. gitignore ของคุณควรละเว้น bin และไดเรกทอรีย่อยและไฟล์ทั้งหมด

ถัง


2

การเพิ่ม ** / bin / ไปยังไฟล์. gitignore ทำให้เคล็ดลับสำหรับฉัน (หมายเหตุ: ไม่ได้เพิ่มโฟลเดอร์ bin ในดัชนี)


1

หากรูปแบบด้านใน.gitignoreลงท้ายด้วยเครื่องหมายทับ/จะพบเฉพาะการจับคู่กับไดเรกทอรี

ในคำอื่น ๆbin/จะตรงกับไดเรกทอรีbinและเส้นทางภายใต้มัน binแต่จะไม่ตรงกับแฟ้มปกติหรือการเชื่อมโยงสัญลักษณ์


หากรูปแบบไม่มีเครื่องหมายทับเช่นในbinGit ถือว่าเป็นรูปแบบเชลล์แบบกลม (โลภ) /binดังนั้นที่ดีที่สุดจะง่ายต่อการใช้

bin จะไม่เป็นทางออกที่ดีที่สุดสำหรับปัญหานี้โดยเฉพาะ


หมายถึง 'เริ่มต้นด้วย' a /หรือ
เถาวัลย์

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