เนื่องจากข้อ จำกัด แปลก ๆ ภายนอกฉันไม่สามารถแก้ไขที่.gitignoreเก็บของฉันได้ มีวิธีละเว้นไฟล์และไดเร็กทอรีอื่นนอกเหนือจากการแก้ไข.gitignoreหรือไม่? แม้ว่าจะเป็นโซลูชันระดับโลกเช่นการกำหนดค่าส่วนกลางที่จะนำไปใช้กับที่เก็บทั้งหมดของฉัน
เนื่องจากข้อ จำกัด แปลก ๆ ภายนอกฉันไม่สามารถแก้ไขที่.gitignoreเก็บของฉันได้ มีวิธีละเว้นไฟล์และไดเร็กทอรีอื่นนอกเหนือจากการแก้ไข.gitignoreหรือไม่? แม้ว่าจะเป็นโซลูชันระดับโลกเช่นการกำหนดค่าส่วนกลางที่จะนำไปใช้กับที่เก็บทั้งหมดของฉัน
คำตอบ:
อย่าลืมตามgitignoreว่ามีลำดับความสำคัญใน "แหล่งที่มาของรูปแบบที่ไม่สนใจ" ต่างๆที่ Git พิจารณา:
$GIT_DIR/info/exclude.core.excludesfileรูปแบบการอ่านจากแฟ้มที่ระบุโดยตัวแปรการกำหนดค่าสองข้อสุดท้ายอาจเป็นทางออกสำหรับปัญหาของคุณ แต่:
(ดูคำถาม SOนี้ด้วย)
อีกสองวิธีที่เกี่ยวข้องกับการอัปเดตดัชนี ( git update-index):
git update-index --assume-unchanged: ดู " Git: ยกเลิกการติดตามไฟล์ใน repo ในเครื่องเท่านั้นและเก็บไว้ใน repo ระยะไกล " git update-index --assume-unchangedในไดเรกทอรี " --no-assume-unchangeเพื่อย้อนกลับผลกระทบ: โปรดดูที่ " มันเป็นไปได้ที่จะgit addไฟล์ที่มีการป้องกันในขณะนี้โดยassume-unchanged? "อย่างไรก็ตามเมื่อคุณชำระเงินสาขาอื่นหรือเมื่อคุณgit pullสถานะ "ละเว้น" นั้นอาจถูกรีเซ็ต ดังนั้นตัวเลือกอื่น ๆ :
git update-index --skip-worktree; ดู:
ความแตกต่างระหว่างทั้งสองมีอธิบายไว้ใน " Git - ความแตกต่างระหว่าง ' assume-unchanged' และ ' skip-worktree' "
update-index --skip-work-treeคุณยังมี ฉันแก้ไขคำตอบเพื่อเพิ่มลิงก์ไปยังคำตอบเก่า ๆ ของฉันที่แสดงupdate-indexคำสั่งทั้งสองนี้
หากคุณสามารถแก้ไขได้.git/info/excludeคุณสามารถวางกฎเดียวกันไว้ที่นั่นได้ แต่ไฟล์นั้นอยู่ใน repo ในเครื่องของคุณเท่านั้น
.gitไดเร็กทอรีในโมดูลย่อย ...
.gitโฟลเดอร์ของโมดูลย่อยอยู่ที่parent_repo/.git/modules/submodule_name. ดังนั้นคุณต้องแก้ไขparent_repo/.git/modules/submodule_name/info/exclude
มีสามวิธีในการบอก GIT ว่าจะละเว้นไฟล์ใด:
.gitignore ไฟล์$GIT_DIR/.git/info/excludecore.excludesfileตั้งค่าสองประเด็นหลังสามารถแก้ปัญหาของคุณได้
สำหรับข้อมูลเพิ่มเติมโปรดดูที่gitignore (5)
หากคุณแค่ต้องการมีไฟล์ในเครื่องในที่เก็บและตำแหน่งไดเร็กทอรีย่อยมีความยืดหยุ่นคุณสามารถใส่ไฟล์ของคุณเข้าไปtracked_dir1/tracked_dir2/untracked_dir/แล้วเพิ่มไฟล์ที่tracked_dir1/tracked_dir2/untracked_dir/.gitignoreมีเนื้อหาเช่น:
*
กล่าวคือ
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
ฉันอยู่ในสถานการณ์คล้าย ๆ กันดังนั้นฉันจึงเพิ่มโซลูชันที่ต้องการซึ่งฉันไม่เห็นกล่าวถึง ปัญหาgit update-index --assume-unchangedในกรณีนี้คือคุณไม่สามารถทำเช่นนั้นสำหรับไฟล์ที่ไม่ได้ติดตาม คุณบอกว่า
ฉันไม่สามารถแก้ไข. gitignore ของที่เก็บของฉันได้
ฉันจะถือว่าคุณหมายถึงว่าคุณไม่สามารถผลักดันการเปลี่ยนแปลงใด ๆ.gitignoreกับจุดเริ่มต้นได้ หากเป็นเช่นนั้นสิ่งที่คุณทำได้คือเพิ่มไฟล์ที่ไม่ได้ติดตามลงในเครื่องของคุณ.gitignoreจากนั้นgit update-index --assume-unchanged .gitignoreให้ทำเพื่อไม่ให้การเปลี่ยนแปลงของคุณ.gitignoreถูกผลักดัน ตอนนี้คุณกำลังละเว้นไฟล์ที่ไม่ได้ติดตาม (อาจ) และไม่มีผลกับ.gitignoreไฟล์ระยะไกล
ละเว้นการเปลี่ยนแปลงในระบบของไฟล์ที่ติดตาม:
git update-index --assume-unchanged my-file.php
ยกเลิกการลบการเปลี่ยนแปลงในระบบของไฟล์ที่ติดตาม:
git update-index --no-assume-unchanged my-file.php
แหล่งที่มา: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
คุณสามารถใช้วิธี global gitignore แทนการแก้ไขวิธีการในโครงการ https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
อีกวิธีหนึ่ง:
.gitignoregit update-index --assume-unchanged .gitignore
update-index --assume-unchanged@see stackoverflow.com/a/25253144/292408