ฉันจะเพิกเฉยต่อไดเรกทอรีหรือโฟลเดอร์ใน Git โดยใช้ msysgit บน Windows ได้อย่างไร?
.gitkeep
) เพื่อระบุไดเรกทอรีที่ควรจะเก็บไว้
/
ที่สิ้นสุดสิ่งที่ทำให้มันรู้ว่าไดเรกทอรีของมันควรละเลย?
ฉันจะเพิกเฉยต่อไดเรกทอรีหรือโฟลเดอร์ใน Git โดยใช้ msysgit บน Windows ได้อย่างไร?
.gitkeep
) เพื่อระบุไดเรกทอรีที่ควรจะเก็บไว้
/
ที่สิ้นสุดสิ่งที่ทำให้มันรู้ว่าไดเรกทอรีของมันควรละเลย?
คำตอบ:
สร้างไฟล์ชื่อ.gitignore
ในไดเรกทอรีของโครงการของคุณ ละเว้นไดเรกทอรีโดยป้อนชื่อไดเรกทอรีลงในไฟล์ (โดยใช้เครื่องหมายสแลชต่อท้าย):
dir_to_ignore/
โดยค่าเริ่มต้น Windows Explorer จะแสดงในเมื่อความจริงชื่อไฟล์เป็น.gitignore
.gitignore.txt
Git จะไม่ใช้งาน .gitignore.txt
และคุณไม่สามารถเปลี่ยนชื่อไฟล์เป็น.gitignore
เพราะ Windows Explorer คิดว่าเป็นไฟล์ประเภท gitignore โดยไม่มีชื่อ
โซลูชันบรรทัดคำสั่งที่ไม่ใช่:
คุณสามารถเปลี่ยนชื่อไฟล์เป็น".gitignore" และมันจะสร้าง".gitignore"
".gitignore"
มันจะบันทึกโดยไม่ต้องเพิ่มส่วนขยายโดยอัตโนมัติ
".gitignore."
- นี่คือเคล็ดลับที่ยอดเยี่ยม! ฉันมักจะมีปัญหาด้วย.htaccess
เช่นกัน ...
ดูเหมือนว่าการเพิกเฉยไฟล์และไดเรกทอรีมีสองวิธีหลัก:
.gitignore
.gitignore
ไฟล์ลงในรูทของพื้นที่เก็บข้อมูลของคุณนอกเหนือจาก.git
โฟลเดอร์ (ใน Windows ตรวจสอบให้แน่ใจว่าคุณเห็นนามสกุลไฟล์จริงจากนั้นสร้าง.gitignore.
(พร้อมกับจุดสิ้นสุดเพื่อสร้างนามสกุลไฟล์ว่าง))~/.gitignore_global
และเรียกใช้git config --global core.excludesfile ~/.gitignore_global
เพื่อเพิ่มสิ่งนี้ในการกำหนดค่า Git ของคุณหมายเหตุ: ไฟล์ที่ถูกติดตามก่อนสามารถยกเลิกการติดตามได้โดยการเรียกใช้ git rm --cached filename
พื้นที่เก็บข้อมูลไม่รวม - .git/info/exclude
สำหรับไฟล์ในท้องถิ่นที่ไม่ต้องมีการใช้ร่วมกันคุณเพียงแค่เพิ่มรูปแบบแฟ้มหรือไดเรกทอรีไปยังแฟ้ม กฎวิทยานิพนธ์ไม่ได้มุ่งมั่นเพื่อให้พวกเขาไม่เห็นโดยผู้ใช้อื่น ดูข้อมูลเพิ่มเติมได้ที่นี่
ในการสร้างข้อยกเว้นในรายการไฟล์ที่ถูกข้ามให้ดูคำถามนี้
git rm --cached <filename>
ชี้งานที่ดีออกมา สำคัญอย่างยิ่งสำหรับ repos ที่มีอยู่ก่อนที่คุณจะสร้าง.gitignore
ฉันมีปัญหาบางอย่างในการสร้างไฟล์ในWindows Explorerพร้อมกับ.
ตอนเริ่มต้น
วิธีแก้ปัญหาคือไปที่ commandshell และสร้างไฟล์ใหม่โดยใช้ "แก้ไข"
.
ส่วนท้ายเพื่อให้ explorer หยุดคิดว่า.gitignore
เป็นส่วนเสริม จากนั้นในรายการที่จุดต่อท้ายที่ไม่มีส่วนขยายเพิ่งถูกกินและคุณถูกทิ้งให้อยู่กับ.gitignore
TL; DR: ลองตั้งชื่อมัน.gitignore.
=> คุณจบลงด้วย.gitignore
ในการสั่งให้ Git เพิกเฉยต่อไฟล์หรือโฟลเดอร์บางอย่างคุณจะต้องสร้าง.gitignore
ไฟล์
แต่ใน Windows Explorer คุณต้องระบุชื่อไฟล์ คุณไม่สามารถสร้างไฟล์ที่มีเพียงส่วนขยาย เคล็ดลับคือการสร้างไฟล์ข้อความที่ว่างเปล่าและไปที่พร้อมรับคำสั่งและเปลี่ยนชื่อของไฟล์เป็น.gitignore
:
ren "New Text Document.txt" .gitignore
ตอนนี้เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและเพิ่มชื่อไฟล์ / โฟลเดอร์ที่คุณต้องการให้คุณเพิกเฉย *.txt
นอกจากนี้คุณยังสามารถใช้สัญลักษณ์แทนเช่นนี้
type nul > .gitignore
เพื่อสร้างไฟล์เปล่า
.gitignore.
เมื่อส่วนขยายไฟล์ไม่ได้ซ่อนอยู่ใน Windows explorer ของคุณ
หากคุณต้องการรักษาโฟลเดอร์และไม่ใช่ไฟล์ที่อยู่ข้างในให้ใส่ไฟล์ ".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
ใน Windows จะมีช่องว่างสำหรับเก็บเครื่องหมายทับ ไม่รวมไดเรกทอรีเดียวใน. gitignoreด้วย
dir_to_exclude /
อาจเป็นไปได้ แต่ยกเว้นไดเรกทอรีทั้งหมดด้วย
/
ทำให้เกิดปัญหาเมื่อคุณมีชื่อไฟล์ที่มีช่องว่าง (เช่นmy file.txt
) ในไดเรกทอรีของคุณ: Git Bash หนีช่องว่างเหล่านี้ด้วยแบ็กสแลช (เช่นmy\ file.txt
) และ Git สำหรับ Windows ไม่แยกความแตกต่างระหว่าง/
และ\
และ
หากต้องการยกเว้นไดเรกทอรีทั้งหมดให้ใช้:
** /
เครื่องหมายดอกจันสองตัวติดต่อกันแสดงถึงเนื้อหาของไดเรกทอรี
นอกจากนี้ใน\.git\info
ไดเรกทอรีโครงการของคุณมีไฟล์ที่แยกออกซึ่งมีประสิทธิภาพเหมือนกับ.gitignore
(ฉันคิดว่า) คุณสามารถเพิ่มไฟล์และไดเรกทอรีที่จะไม่สนใจ
ในกรณีที่คุณต้องแยกโฟลเดอร์ย่อยคุณสามารถใช้**
wildcard เพื่อแยกไดเรกทอรีย่อยได้ทุกระดับ
**/build/output/Debug/
ในการเพิกเฉยไดเรกทอรีทั้งหมดใน Git วิธีที่ง่ายที่สุดคือการรวมไฟล์. gitignore ภายในไดเรกทอรีเป้าหมายซึ่งมี "*"
ตัวอย่างตัวอย่าง
ระบบตัวอย่าง
/root/
.gitignore
/dirA/
someFile1.txt
someFile2.txt
/dirB/
.gitignore
someFile3.txt
someFile4.txt
เป้าหมาย
ระดับสูงสุด. gitignore (/root/.gitignore)
ไดเรกทอรีที่ละเว้น. gitignore (/root/dirB.gitignore)
และมันง่ายมาก :)
เมื่อทุกอย่างอื่นล้มเหลวลองแก้ไขไฟล์
/.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/
ฉันเพิ่มโฟลเดอร์ "ทรัพย์สิน" และ "รวบรวม" ในรายการของไฟล์และไดเรกทอรีที่จะไม่สนใจ
บน Unix:
touch .gitignore
บน Windows:
echo > .gitignore
คำสั่งเหล่านี้ดำเนินการในสถานีจะสร้าง .gitignore
ไฟล์ในตำแหน่งปัจจุบัน
จากนั้นเพิ่มข้อมูลลงในนี้ .gitignore
ไฟล์ (โดยใช้ตัวอย่าง Notepad ++) ไฟล์หรือโฟลเดอร์ที่ควรละเว้น บันทึกการเปลี่ยนแปลงของคุณ แค่นั้นแหละ :)
ข้อมูลเพิ่มเติม: .gitignore
คุณสามารถสร้างไฟล์ ".gitignore" ด้วยเนื้อหา:
*
!.gitignore
มันใช้งานได้สำหรับฉัน
ฉันมีปัญหาในการรับ Git เพื่อรับ.gitignore
ไฟล์บน Windows $GIT_DIR/info/exclude
ไฟล์เสมอดูเหมือนว่าจะทำงานแม้ว่า
อย่างไรก็ตามข้อเสียของวิธีนี้คือไฟล์ใน$GIT_DIR
ไดเรกทอรีไม่รวมอยู่ในการเช็คอินและดังนั้นจึงไม่ได้แชร์
ps
$GIT_DIR
มักจะเป็นโฟลเดอร์ที่ซ่อนชื่อ.git
ฉันคิดว่าปัญหาคือต้นไม้ทำงานของคุณเป็นเช่น:
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
เช่นกันฉันแค่ขี้เกียจกับกรณีทดสอบนี้)
บน Windows และ Mac หากคุณต้องการละเว้นโฟลเดอร์ชื่อ Flower_Data_Folder ในไดเรกทอรีปัจจุบันคุณสามารถทำได้:
echo Flower_Data_Folder >> .gitignore
หากเป็นไฟล์ชื่อdata.txt
:
echo data.txt >> .gitignore
หากเป็นเส้นทางเช่น "Data / password.txt"
echo "Data/passwords.txt" >> .gitignore.
ฉันมีปัญหาที่คล้ายกัน ฉันทำงานบนเครือข่ายเครื่องมือ Windows ที่มีที่เก็บที่ใช้ร่วมกันกับพวก Linux และพวกเขาสร้างไฟล์ที่มีชื่อเดียวกัน (ยกเว้นกรณี) ในโฟลเดอร์ที่กำหนดอย่างมีความสุข
ผลที่ได้คือฉันสามารถโคลนที่เก็บและทันทีมีหลายสิบไฟล์ 'แก้ไข' ที่ถ้าฉันเช็คอินจะสร้างความเสียหาย
ฉันได้ตั้งค่า Windows เป็นตัวพิมพ์ใหญ่และตัวเล็กและ Git ไม่สนใจตัวพิมพ์เล็ก แต่ก็ยังล้มเหลว (ในการเรียก Win32 API จะเห็นได้ชัด)
ถ้าฉัน gitignore ไฟล์แล้วฉันต้องจำไว้ว่าอย่าติดตามไฟล์. gitignore
แต่ฉันพบคำตอบที่ดีที่นี่:
http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html
เพียงแค่สร้าง.gitignore
ไฟล์ในโฟลเดอร์โครงการของคุณจากนั้นเพิ่มชื่อโฟลเดอร์ในไฟล์สำหรับอดีต:
frontend/node_modules