เพิ่มโฟลเดอร์เฉพาะที่สร้างขึ้นใหม่ไปยัง. gitignore ใน Git


90

ฉันมีไดเร็กทอรีการทำงานที่สะอาดและนำมาในโคลนจาก Git repo เมื่อคืนที่ผ่านมา แต่ตอนนี้เซิร์ฟเวอร์ภายในของฉันสร้างและมีโฟลเดอร์สถิติที่ฉันต้องการละเว้น

ดูเหมือนว่าฉันไม่สามารถทำให้ Git เพิกเฉยต่อโฟลเดอร์นี้ได้เมื่อเรียกใช้สถานะคอมไพล์

On branch master
Your branch is ahead of 'origin/master' by 1 commit.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file: app_public/views/pages/privacy.php
    new file: app_public/views/pages/terms.php
    new file: public_html/stats/ctry_usage_200908.png
    new file: public_html/stats/daily_usage_200908.png
    new file: public_html/stats/dns_cache.db
    new file: public_html/stats/hourly_usage_200908.png
    new file: public_html/stats/index.html
    new file: public_html/stats/usage.png
    new file: public_html/stats/usage_200908.html
    new file: public_html/stats/webalizer.current
    new file: public_html/stats/webalizer.hist

Changed but not updated:
    modified: .gitignore

ฉันเพิ่มใน. gitignore สองสามบรรทัด แต่ยังคงพยายามเพิ่ม:

public_html/stats
public_html/stats/**
public_html/stats/**/*
public_html/stats/*

คำตอบ:


99

ลอง/public_html/stats/*?

แต่เนื่องจากไฟล์ในgit statusรายงานว่ามีการยืนยันจึงหมายความว่าคุณได้เพิ่มไฟล์ด้วยตนเองแล้ว ในกรณีนี้แน่นอนว่ามันสายเกินไปที่จะเพิกเฉย คุณสามารถทำได้git rm --cache(IIRC)


16
รอ! คุณมี "ไฟล์ที่จะมุ่งมั่น" - นั่นหมายความว่าคุณได้แล้วgit add-ed พวกเขา
Michael Krelin - แฮ็กเกอร์

94

สำหรับกรณีนี้มีสองกรณี

กรณีที่ 1:เพิ่มไฟล์ใน git repo แล้ว

กรณีที่ 2:ไฟล์ที่สร้างขึ้นใหม่และสถานะยังคงแสดงเป็นไฟล์ที่ไม่ถูกติดตามเมื่อใช้งาน

git status

หากคุณมีกรณีที่ 1:

ขั้นตอนที่ 1: จากนั้นเรียกใช้

git rm --cached filename 

เพื่อลบออกจาก git repo cache

ถ้าเป็นไดเร็กทอรีให้ใช้

git rm -r --cached  directory_name

ขั้นตอนที่ 2:หากกรณีที่ 1สิ้นสุดลงให้สร้างไฟล์ใหม่ที่มีชื่อ.gitignoreใน git repo ของคุณ

ขั้นตอนที่ 3:ใช้คำสั่งต่อไปนี้เพื่อบอกให้คอมไพล์ละเว้น / ถือว่าไฟล์ไม่เปลี่ยนแปลง

git update-index --assume-unchanged path/to/file.txt

ขั้นตอนที่ 4:ตอนนี้ตรวจสอบสถานะโดยใช้สถานะคอมไพล์ที่เปิด.gitignoreในตัวแก้ไข nano, vim, geany ฯลฯ ... อันใดอันหนึ่งเพิ่มเส้นทางของไฟล์ / โฟลเดอร์ที่จะละเว้น หากเป็นโฟลเดอร์ผู้ใช้folder_name/*จะละเว้นไฟล์ทั้งหมด

หากคุณยังไม่เข้าใจให้อ่านบทความ git ละเว้นลิงก์ไฟล์


3
ฉันได้รับเมื่อfatal: Unable to mark file .idea/jsLibraryMappings.xmlฉันทำupdate-index
OlehZiniak

@OlehZiniak คุณคิดออกแล้วว่าควรทำอย่างไรเมื่อเกิดfatal: Unable to mark fileข้อผิดพลาด กรุณาช่วย.
chanchal pardeshi

สิทธิ์และความเป็นเจ้าของไฟล์ที่คุณไม่สามารถทำเครื่องหมายได้ มันแสดงข้อผิดพลาดในขั้นตอนใด
Kshitiz

16

จาก "git ช่วยละเว้น" เราเรียนรู้:

หากรูปแบบลงท้ายด้วยเครื่องหมายทับจะถูกลบออกตามวัตถุประสงค์ของคำอธิบายต่อไปนี้ แต่จะพบเฉพาะไดเร็กทอรี กล่าวอีกนัยหนึ่ง foo / จะจับคู่ไดเร็กทอรี foo และพา ธ ที่อยู่ด้านล่าง แต่จะไม่ตรงกับไฟล์ปกติหรือลิงก์สัญลักษณ์ foo (ซึ่งสอดคล้องกับวิธีการทำงานของ pathspec โดยทั่วไปใน git)

ดังนั้นสิ่งที่คุณต้องการคือ

public_html / สถิติ /


1
นั่นหมายความว่า "public_html / stats /" จะตรงกับไดเร็กทอรีเท่านั้น แต่ไม่ใช่ไฟล์ แต่ "public_html / stats" จะจับคู่ทั้งไดเร็กทอรีและไฟล์ชื่อนั้นดังนั้นจึงไม่ใช่ปัญหา ยังคงเป็นความคิดที่ดีแม้ว่า
jmanning2k

1
หน้าคนพูดว่า foo / จะตรงกับไดเรกทอรี foo และเส้นทางที่อยู่ข้างใต้ OP ต้องการละเว้นโฟลเดอร์และเนื้อหาในโฟลเดอร์ นอกเหนือจากปัญหาอื่น ๆ เกี่ยวกับ git add แล้วนี่คือวิธีการทำ
kajaco

6

มัน/public_html/stats/*.

$ ~/myrepo> ls public_html/stats/
bar baz foo
$ ~/myrepo> cat .gitignore 
public_html/stats/*
$ ~/myrepo> git status
# On branch master
#
# Initial commit
#
# 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)
$ ~/myrepo>

2

ฉันขี้เกียจอย่างไม่น่าเชื่อ ฉันเพิ่งค้นหาโดยหวังว่าจะพบทางลัดสำหรับปัญหานี้ แต่ไม่ได้รับคำตอบดังนั้นฉันจึงทำสิ่งนี้ขึ้นมา

~ / bin / IGNORE_ALL

#!/bin/bash
# Usage: IGNORE_ALL <commit message>                                                                                                                             
git status --porcelain | grep '^??' | cut -f2 -d' ' >> .gitignore              
git commit -m "$*" .gitignore 

เช่น IGNORE_ALL สถิติที่เพิ่มจะไม่สนใจ

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

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