ไม่สนใจไดเรกทอรีในที่เก็บ Git บน Windows


1105

ฉันจะเพิกเฉยต่อไดเรกทอรีหรือโฟลเดอร์ใน Git โดยใช้ msysgit บน Windows ได้อย่างไร?


คุณต้องการให้โฟลเดอร์แคชถูกแยกออกจากที่เก็บอย่างสมบูรณ์หรือเพียงแค่เนื้อหาของมัน?
Gareth

1
ฉันเดาว่า OP มีหลายแคชไดเรกทอรีซึ่งเนื้อหาควรถูกละเว้น แต่ต้องการให้แน่ใจว่าไดเรกทอรีเหล่านั้นถูกสร้างขึ้นสำหรับทุกคนที่โคลนที่เก็บ
ทำเครื่องหมาย Longair

@Gareth: เนื่องจากโฟลเดอร์ว่างไม่ถูกติดตามด้วยคอมไพล์ถ้าเนื้อหาถูกเพิกเฉยโฟลเดอร์ก็จะเป็นเช่นนั้นใช่ไหม
eckes

3
ที่ผมกล่าวถึงเพียงแค่นั้นเพราะบางคนใช้ไฟล์ที่ซ่อนอยู่ (ปกติ.gitkeep) เพื่อระบุไดเรกทอรีที่ควรจะเก็บไว้
แกเร็ ธ

2
เป็น/ที่สิ้นสุดสิ่งที่ทำให้มันรู้ว่าไดเรกทอรีของมันควรละเลย?
Charlie Parker

คำตอบ:


1594

สร้างไฟล์ชื่อ.gitignoreในไดเรกทอรีของโครงการของคุณ ละเว้นไดเรกทอรีโดยป้อนชื่อไดเรกทอรีลงในไฟล์ (โดยใช้เครื่องหมายสแลชต่อท้าย):

dir_to_ignore/

ดูข้อมูลเพิ่มเติมได้ที่นี่


130
ในหน้าต่างแจ้งให้ cmd คุณสามารถใช้ 'แก้ไข. gitignore' หรือ 'notepad .gitignore' เพื่อสร้างไฟล์ที่ถูกต้อง
Joey Green

44
หรือคุณสามารถใช้ 'touch .gitignore' จากในหน้าต่างรับคำสั่ง git bash และจะสร้างไฟล์ที่มีชื่ออย่างถูกต้องซึ่งจะสามารถแก้ไขได้โดย notepad หรือสิ่งที่คล้ายกัน ...
SGB

39
หรือเพียงแค่สร้างไฟล์ชื่อ. gitignore ด้วย explorer และแก้ไขด้วย notepad (จุดต่อท้ายจะถูกลบออก) ด้วยวิธีนี้คุณไม่จำเป็นต้องใช้พรอมต์คำสั่ง
P. Galbraith

6
หรือคุณสามารถเป็นกลุ่ม. gignignore จาก terminal :)
MollyCat

34
หรือที่ไม่ได้รับการกล่าวถึงอย่างน่าประหลาดใจแม้ว่าจะเป็นวิธีที่เร็วที่สุดเพียงแค่พิมพ์ "echo folder_to_ignore >> .gitignore" ในคอนโซล
Godsmith

205

โดยค่าเริ่มต้น Windows Explorer จะแสดงในเมื่อความจริงชื่อไฟล์เป็น.gitignore.gitignore.txt

Git จะไม่ใช้งาน .gitignore.txt

และคุณไม่สามารถเปลี่ยนชื่อไฟล์เป็น.gitignoreเพราะ Windows Explorer คิดว่าเป็นไฟล์ประเภท gitignore โดยไม่มีชื่อ

โซลูชันบรรทัดคำสั่งที่ไม่ใช่:

คุณสามารถเปลี่ยนชื่อไฟล์เป็น".gitignore" และมันจะสร้าง".gitignore"

46
มันใช้ได้เหรอ ฉันมักจะบอกให้คนเปิด Notepad และในกล่องโต้ตอบบันทึกเป็นพิมพ์ชื่อไฟล์ที่ล้อมรอบด้วย doublequotes ดังนั้นตัวอย่างเช่น".gitignore"มันจะบันทึกโดยไม่ต้องเพิ่มส่วนขยายโดยอัตโนมัติ
Arrowmaster

9
เรียบร้อย รวมถึงระยะเวลาต่อท้ายไม่ทำงาน Explorer จะปิดช่วงเวลาสุดท้ายส่งผลให้มีไฟล์ชื่อ ".gitignore" ฉันคิดว่าวิธีการพูดนั้นสะอาดกว่าและมีโอกาสน้อยที่จะสร้างความประหลาดใจ
Triynko

4
หรือในกล่องโต้ตอบบันทึกเป็นเปลี่ยนประเภทไฟล์เป็น "ไฟล์ทั้งหมด ( . )" - จากนั้น Windows จะไม่ต่อท้ายส่วนขยายใด ๆ
OsakaWebbie

5
หรือทุบตีคอมไพล์เพียงแค่พิมพ์ "สัมผัส .gitignore" ในโฟลเดอร์ของคุณ
Rayjax

3
".gitignore."- นี่คือเคล็ดลับที่ยอดเยี่ยม! ฉันมักจะมีปัญหาด้วย.htaccessเช่นกัน ...
Obmerk Kronen

105

ดูเหมือนว่าการเพิกเฉยไฟล์และไดเรกทอรีมีสองวิธีหลัก:

  1. .gitignore

    • วาง.gitignoreไฟล์ลงในรูทของพื้นที่เก็บข้อมูลของคุณนอกเหนือจาก.gitโฟลเดอร์ (ใน Windows ตรวจสอบให้แน่ใจว่าคุณเห็นนามสกุลไฟล์จริงจากนั้นสร้าง.gitignore.(พร้อมกับจุดสิ้นสุดเพื่อสร้างนามสกุลไฟล์ว่าง))
    • การกำหนดค่าส่วนกลาง~/.gitignore_globalและเรียกใช้git config --global core.excludesfile ~/.gitignore_globalเพื่อเพิ่มสิ่งนี้ในการกำหนดค่า Git ของคุณ

    หมายเหตุ: ไฟล์ที่ถูกติดตามก่อนสามารถยกเลิกการติดตามได้โดยการเรียกใช้ git rm --cached filename

  2. พื้นที่เก็บข้อมูลไม่รวม - .git/info/excludeสำหรับไฟล์ในท้องถิ่นที่ไม่ต้องมีการใช้ร่วมกันคุณเพียงแค่เพิ่มรูปแบบแฟ้มหรือไดเรกทอรีไปยังแฟ้ม กฎวิทยานิพนธ์ไม่ได้มุ่งมั่นเพื่อให้พวกเขาไม่เห็นโดยผู้ใช้อื่น ดูข้อมูลเพิ่มเติมได้ที่นี่

ในการสร้างข้อยกเว้นในรายการไฟล์ที่ถูกข้ามให้ดูคำถามนี้


36
git rm --cached <filename>ชี้งานที่ดีออกมา สำคัญอย่างยิ่งสำหรับ repos ที่มีอยู่ก่อนที่คุณจะสร้าง.gitignore
MaurerPower

2
git rm - แคช <filename> แก้ไขปัญหาที่ฉันมีด้วย. gitignore :)
JeremyFelix

1
ใช่ git rm - ชื่อไฟล์ที่แคชไว้มีความสำคัญอย่างยิ่ง มันทำให้ฉันเป็นบ้าเพราะคอมพิวเตชันยังเป็นไฟล์ที่ฉันระบุไว้อย่างชัดเจนว่าจะถูกละเว้น (สร้าง gitignore หลังจากคอมมิทเริ่มต้น) ขอบคุณมาก!
Potaito

1
แก้ไขปัญหาของฉัน Git ติดตามโฟลเดอร์ผู้จัดจำหน่ายใน laravel repo ของฉันแม้ว่าฉันได้เพิ่มโฟลเดอร์ผู้จัดจำหน่ายใน gitignore ขอบคุณมาก.
Jayant

44

ฉันมีปัญหาบางอย่างในการสร้างไฟล์ในWindows Explorerพร้อมกับ.ตอนเริ่มต้น

วิธีแก้ปัญหาคือไปที่ commandshell และสร้างไฟล์ใหม่โดยใช้ "แก้ไข"


2
หรือเพียงเพิ่ม.ส่วนท้ายเพื่อให้ explorer หยุดคิดว่า.gitignoreเป็นส่วนเสริม จากนั้นในรายการที่จุดต่อท้ายที่ไม่มีส่วนขยายเพิ่งถูกกินและคุณถูกทิ้งให้อยู่กับ.gitignore TL; DR: ลองตั้งชื่อมัน.gitignore.=> คุณจบลงด้วย.gitignore
leerssej

43

ในการสั่งให้ Git เพิกเฉยต่อไฟล์หรือโฟลเดอร์บางอย่างคุณจะต้องสร้าง.gitignoreไฟล์

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

ren "New Text Document.txt" .gitignore

ตอนนี้เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและเพิ่มชื่อไฟล์ / โฟลเดอร์ที่คุณต้องการให้คุณเพิกเฉย *.txtนอกจากนี้คุณยังสามารถใช้สัญลักษณ์แทนเช่นนี้


15
หรือเพียงแค่: echo dir_to_ignore /> .gitignore
Oliver

2
หรือtype nul > .gitignoreเพื่อสร้างไฟล์เปล่า
Castro Roy

หรือเพียงเรียกไฟล์.gitignore.เมื่อส่วนขยายไฟล์ไม่ได้ซ่อนอยู่ใน Windows explorer ของคุณ
Vairis

22

หากคุณต้องการรักษาโฟลเดอร์และไม่ใช่ไฟล์ที่อยู่ข้างในให้ใส่ไฟล์ ".gitignore" ในโฟลเดอร์ที่มี "*" เป็นเนื้อหา ไฟล์นี้จะทำให้ Git เพิกเฉยต่อเนื้อหาทั้งหมดจากที่เก็บ แต่.gitignoreจะรวมอยู่ในที่เก็บของคุณ

$ git add path/to/folder/.gitignore

หากคุณเพิ่มโฟลเดอร์ว่างคุณจะได้รับข้อความนี้ (.gitignore เป็นไฟล์ที่ซ่อนอยู่)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

ดังนั้นใช้ "-f" เพื่อบังคับเพิ่ม:

$ git add path/to/folder/.gitignore -f

19

ใน Windows จะมีช่องว่างสำหรับเก็บเครื่องหมายทับ ไม่รวมไดเรกทอรีเดียวใน. gitignoreด้วย

dir_to_exclude /

อาจเป็นไปได้ แต่ยกเว้นไดเรกทอรีทั้งหมดด้วย

/

ทำให้เกิดปัญหาเมื่อคุณมีชื่อไฟล์ที่มีช่องว่าง (เช่นmy file.txt) ในไดเรกทอรีของคุณ: Git Bash หนีช่องว่างเหล่านี้ด้วยแบ็กสแลช (เช่นmy\ file.txt) และ Git สำหรับ Windows ไม่แยกความแตกต่างระหว่าง/และ\และ

หากต้องการยกเว้นไดเรกทอรีทั้งหมดให้ใช้:

** /

เครื่องหมายดอกจันสองตัวติดต่อกันแสดงถึงเนื้อหาของไดเรกทอรี


15

นอกจากนี้ใน\.git\infoไดเรกทอรีโครงการของคุณมีไฟล์ที่แยกออกซึ่งมีประสิทธิภาพเหมือนกับ.gitignore(ฉันคิดว่า) คุณสามารถเพิ่มไฟล์และไดเรกทอรีที่จะไม่สนใจ


ฉันชอบวิธีนี้ฉันไม่สามารถไปตามเส้นทางที่นั่นฉันต้องการเพิกเฉยโฟลเดอร์ใน repo หลักได้อย่างไร
Shimmy Weitzhandler

แต่คุณไม่ควรทิ้งไฟล์ไว้ในไฟล์. git เพียงอย่างเดียว (จัดการเนื้อหาด้วยวิธีทางการ)
Peter Mortensen

13

ในกรณีที่คุณต้องแยกโฟลเดอร์ย่อยคุณสามารถใช้**wildcard เพื่อแยกไดเรกทอรีย่อยได้ทุกระดับ

**/build/output/Debug/

12

ในการเพิกเฉยไดเรกทอรีทั้งหมดใน Git วิธีที่ง่ายที่สุดคือการรวมไฟล์. gitignore ภายในไดเรกทอรีเป้าหมายซึ่งมี "*"

ตัวอย่างตัวอย่าง

ระบบตัวอย่าง

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

เป้าหมาย

  • ไม่สนใจเนื้อหาของ / dirB /

ระดับสูงสุด. gitignore (/root/.gitignore)

  • นี่คือที่ข้อมูล gitignore มาตรฐานของคุณไป

ไดเรกทอรีที่ละเว้น. gitignore (/root/dirB.gitignore)

  • ไฟล์นี้อ่านว่า '*' และไดเรกทอรีจะถูกละเว้นอย่างสมบูรณ์ตัวเองและไฟล์ทั้งหมด!

และมันง่ายมาก :)


10

เมื่อทุกอย่างอื่นล้มเหลวลองแก้ไขไฟล์

/.git/info/exclude

และเพิ่มไดเรกทอรีที่คุณต้องการท้ายไฟล์ดังนี้:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

ฉันเพิ่มโฟลเดอร์ "ทรัพย์สิน" และ "รวบรวม" ในรายการของไฟล์และไดเรกทอรีที่จะไม่สนใจ


1
ฉันกำลังใช้ Atom บน Windows 10 ใช้งานได้! ขอบคุณนะเพื่อน!
Putu De

ฉันลองคนอื่น ๆ ทั้งหมดด้วยการตั้งค่าปัจจุบันของฉันและนี่คือคำตอบสุดท้ายของฉัน
Xedret

9

บน Unix:

touch .gitignore

บน Windows:

echo > .gitignore

คำสั่งเหล่านี้ดำเนินการในสถานีจะสร้าง .gitignoreไฟล์ในตำแหน่งปัจจุบัน

จากนั้นเพิ่มข้อมูลลงในนี้ .gitignoreไฟล์ (โดยใช้ตัวอย่าง Notepad ++) ไฟล์หรือโฟลเดอร์ที่ควรละเว้น บันทึกการเปลี่ยนแปลงของคุณ แค่นั้นแหละ :)

ข้อมูลเพิ่มเติม: .gitignore


9

คุณสามารถสร้างไฟล์ ".gitignore" ด้วยเนื้อหา:

*
!.gitignore

มันใช้งานได้สำหรับฉัน


2
นี่คือคำตอบที่ดีที่สุดมันยังนำประโยชน์เพิ่มเติมในการปรับใช้และบำรุงรักษาโครงการ
Nitin ...

"simples"คือใคร?
Peter Mortensen

8

ฉันมีปัญหาในการรับ Git เพื่อรับ.gitignoreไฟล์บน Windows $GIT_DIR/info/excludeไฟล์เสมอดูเหมือนว่าจะทำงานแม้ว่า

อย่างไรก็ตามข้อเสียของวิธีนี้คือไฟล์ใน$GIT_DIRไดเรกทอรีไม่รวมอยู่ในการเช็คอินและดังนั้นจึงไม่ได้แชร์

ps $GIT_DIRมักจะเป็นโฟลเดอร์ที่ซ่อนชื่อ.git


ใช่ git บน windows นั้นพิถีพิถันมากเกี่ยวกับ. gitignore - ไฟล์ที่ไม่รวมอยู่ในเครื่องทำสิ่งที่ฉันต้องการ ขอบคุณ!
andersop

6

ฉันคิดว่าปัญหาคือต้นไม้ทำงานของคุณเป็นเช่น:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... กับที่.gitignoreคุณอธิบาย สิ่งนี้จะให้git statusผลลัพธ์เช่น:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... ถ้าindex.htmlไฟล์ยังไม่ได้รับการเพิ่มพื้นที่เก็บข้อมูล (Git เห็นว่ามีไฟล์ที่ไม่ได้ลงชื่อในแคชไดเรกทอรี แต่รายงานเฉพาะไดเรกทอรีเท่านั้น) ในการแก้ไขให้ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มและยืนยันindex.htmlไฟล์แล้ว:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... และความgit statusตั้งใจของคุณจะเป็นดังนี้:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(เห็นได้ชัดว่าคุณต้องการที่จะกระทำ.gitignoreเช่นกันฉันแค่ขี้เกียจกับกรณีทดสอบนี้)


1
คุณอาจจะต้องการ. gitignore โดยเฉพาะอย่างยิ่งเมื่อคุณต้องการติดตามการเปลี่ยนแปลงและเป็นทีมของคุณ (ถ้าคุณทำงานกับมัน) ดูstackoverflow.com/a/767213/123033
Dave Everitt

2
@Dave Everitt: นั่นเป็นเหตุผลที่ฉันพูดว่า "แน่นอนคุณต้องการที่จะกระทำ. gitignore เช่นกัน"
Mark Longair

6

บน Windows และ Mac หากคุณต้องการละเว้นโฟลเดอร์ชื่อ Flower_Data_Folder ในไดเรกทอรีปัจจุบันคุณสามารถทำได้:

echo Flower_Data_Folder >> .gitignore

หากเป็นไฟล์ชื่อdata.txt:

echo data.txt >> .gitignore

หากเป็นเส้นทางเช่น "Data / password.txt"

echo "Data/passwords.txt" >> .gitignore. 

2

ฉันมีปัญหาที่คล้ายกัน ฉันทำงานบนเครือข่ายเครื่องมือ Windows ที่มีที่เก็บที่ใช้ร่วมกันกับพวก Linux และพวกเขาสร้างไฟล์ที่มีชื่อเดียวกัน (ยกเว้นกรณี) ในโฟลเดอร์ที่กำหนดอย่างมีความสุข

ผลที่ได้คือฉันสามารถโคลนที่เก็บและทันทีมีหลายสิบไฟล์ 'แก้ไข' ที่ถ้าฉันเช็คอินจะสร้างความเสียหาย

ฉันได้ตั้งค่า Windows เป็นตัวพิมพ์ใหญ่และตัวเล็กและ Git ไม่สนใจตัวพิมพ์เล็ก แต่ก็ยังล้มเหลว (ในการเรียก Win32 API จะเห็นได้ชัด)

ถ้าฉัน gitignore ไฟล์แล้วฉันต้องจำไว้ว่าอย่าติดตามไฟล์. gitignore

แต่ฉันพบคำตอบที่ดีที่นี่:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html


ลิงค์ที่ดูเหมือนจะเสีย (มันเปลี่ยนเส้นทางแรกที่จะรุ่น 'https'): "เชื่อมต่อที่ปลอดภัยไม่เกิดข้อผิดพลาดเกิดขึ้นในระหว่างการเชื่อมต่อกับ archive.robwilkerson.org PR_END_OF_FILE_ERROR ได้."
ปีเตอร์มอร์เทน

0

เพียงแค่สร้าง.gitignoreไฟล์ในโฟลเดอร์โครงการของคุณจากนั้นเพิ่มชื่อโฟลเดอร์ในไฟล์สำหรับอดีต:

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