Thêm thư mục cụ thể mới được tạo vào .gitignore trong Git


88

Tôi đã có một thư mục làm việc sạch sẽ và đã mang một bản sao từ kho lưu trữ Git vào đêm qua. Nhưng bây giờ máy chủ cục bộ của tôi đã được tạo và chứa một thư mục thống kê mà tôi muốn bỏ qua.

Tôi dường như không thể khiến Git bỏ qua thư mục này khi tôi chạy trạng thái 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

Tôi đã thêm vào .gitignore của mình một vài dòng khác nhau nhưng nó vẫn cố gắng thêm chúng:

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

Câu trả lời:


98

Hãy thử /public_html/stats/*?

Nhưng vì các tệp git statusđược báo cáo là được cam kết có nghĩa là bạn đã thêm chúng theo cách thủ công. Trong trường hợp đó, tất nhiên, đã quá muộn để bỏ qua. Bạn có thể git rm --cachechúng (IIRC).


16
Chờ đợi! Bạn có "các tệp cần được cam kết" - điều đó có nghĩa là bạn đã lưu trữ git addchúng.
Michael Krelin - hacker

93

Đối với điều này có hai trường hợp

Trường hợp 1: Tệp đã được thêm vào git repo.

Trường hợp 2: Tệp mới được tạo và trạng thái của nó vẫn hiển thị là tệp chưa được theo dõi khi sử dụng

git status

Nếu bạn gặp trường hợp 1:

BƯỚC 1: Sau đó chạy

git rm --cached filename 

để xóa nó khỏi bộ nhớ cache git repo

nếu nó là một thư mục thì hãy sử dụng

git rm -r --cached  directory_name

BƯỚC 2: Nếu Trường hợp 1 kết thúc, hãy tạo tệp mới có tên .gitignoretrong git repo của bạn

BƯỚC 3: Sử dụng lệnh sau để yêu cầu git bỏ qua / giả sử tệp không thay đổi

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

BƯỚC 4: Bây giờ, kiểm tra trạng thái bằng cách sử dụng trạng thái git mở .gitignoretrong trình soạn thảo của bạn nano, vim, geany, v.v. bất kỳ, thêm đường dẫn của tệp / thư mục để bỏ qua. Nếu nó là một thư mục thì người dùng folder_name/*bỏ qua tất cả các tệp.

Nếu bạn vẫn chưa hiểu hãy đọc bài git bỏ qua link file .


3
Tôi nhận được khi fatal: Unable to mark file .idea/jsLibraryMappings.xmlkhi tôi làmupdate-index
OlehZiniak

@OlehZiniak bạn đã tìm ra những gì nên làm khi gặp fatal: Unable to mark filelỗi chưa. Xin vui lòng giúp đỡ.
chanchal pardeshi

quyền và quyền sở hữu tệp mà bạn không thể đánh dấu. ở bước nào nó hiển thị lỗi?
Kshitiz

16

Từ "git help ignore", chúng ta học:

Nếu mẫu kết thúc bằng một dấu gạch chéo, nó sẽ bị xóa vì mục đích của mô tả sau, nhưng nó sẽ chỉ tìm thấy sự phù hợp với một thư mục. Nói cách khác, foo / sẽ khớp với foo thư mục và các đường dẫn bên dưới nó, nhưng sẽ không khớp với một tệp thông thường hoặc một liên kết tượng trưng foo (điều này phù hợp với cách thức hoạt động của pathspec nói chung trong git).

Do đó những gì bạn cần là

public_html / stats /


1
Điều đó chỉ có nghĩa là "public_html / stats /" sẽ chỉ khớp với một thư mục chứ không phải một tệp, nhưng "public_html / stats" sẽ khớp với cả thư mục và tệp có tên đó, vì vậy đó không phải là vấn đề. Vẫn là một ý kiến ​​hay.
jmanning2k

1
Trang người đàn ông cho biết foo / sẽ khớp với foo thư mục và các đường dẫn bên dưới nó. OP muốn bỏ qua thư mục và nội dung của nó. Ngoài các vấn đề khác với git add, đây là cách nó được thực hiện.
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

Tôi vô cùng lười biếng. Tôi chỉ thực hiện một tìm kiếm với hy vọng tìm ra lối tắt cho vấn đề này nhưng không nhận được câu trả lời nên tôi đã gõ nó.

~ / bin / IGNORE_ALL

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

EG: IGNORE_ALL bỏ qua chỉ số đã thêm

Điều này sẽ chỉ nối tất cả các tệp bỏ qua vào .gitignore và cam kết của bạn. lưu ý rằng bạn có thể muốn thêm chú thích vào tệp sau đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.