Cara mengecualikan file hanya dari folder root di Git

399

Saya sadar menggunakan .gitignorefile untuk mengecualikan beberapa file yang ditambahkan, tetapi saya memiliki beberapa config.phpfile dalam struktur kode sumber dan saya perlu mengecualikan hanya satu, terletak di root sementara yang lain tetap di bawah kontrol revisi.

Apa yang harus saya tulis .gitignoreuntuk mewujudkan hal ini?

Pavel Karoukin
sumber

Jawaban:

589

Dari dokumentasi :

Jika polanya tidak mengandung slash /, git memperlakukannya sebagai pola glob shell dan memeriksa kecocokan dengan pathname relatif terhadap lokasi file .gitignore (relatif terhadap tingkat tertinggi pohon kerja jika bukan dari .gitignore mengajukan).

Garis miring terkemuka cocok dengan awal pathname. Misalnya, "/*.c" cocok dengan "cat-file.c" tetapi tidak "mozilla-sha1 / sha1.c".

Jadi, Anda harus menambahkan baris berikut ke root Anda .gitignore:

/config.php
Manoj Govindan
sumber
1
Terima kasih! Saya mencobanya dengan cara ini, tetapi karena alasan tertentu tidak berhasil. Mungkin salah ketik di suatu tempat sesuatu =)
Pavel Karoukin
1
Bagaimana jika itu bukan file, tetapi folder, dan saya ingin mengabaikan folder itu di root repo, berisi file dan semua subfolder dan file mereka? /folder/?
CodeManX
11
Entah /folder/atau /foldermau bekerja, tetapi menambahkan garis miring pada batas membatasi kecocokan hanya untuk folder. Jika Anda memiliki file bernama 'foo' di direktori root, /foo/tidak akan mengabaikannya, tetapi /fooakan melakukannya.
tehDorf
Jika Anda sudah mengkomit file, jalankan perintah git rm --cached <file>, kalau tidak file tersebut tidak akan diabaikan. Dari: stackoverflow.com/a/1274447
Bruno Polo
83

Gunakan /config.php.

Richard Fearn
sumber
29

Versi git yang lebih lama mengharuskan Anda mendefinisikan pola abaikan terlebih dahulu dan segera (pada baris berikutnya) menentukan pengecualian. [diuji pada versi 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Versi yang lebih baru hanya membutuhkan yang berikut [diuji pada versi 2.2.1]

/config.php
kenhowardpdx
sumber
17

Jika solusi di atas tidak bekerja untuk Anda, coba ini:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php
obat-obatan
sumber
Ini memang bekerja untuk saya, sedangkan yang /config.phpsendirian tidak. Saya ingin tahu mengapa tidak. Anda punya ide?
iago-lito 'mempertimbangkan untuk meninggalkan
@ iago-lito jika Anda bekerja pada beberapa proyek tertentu dan berjuang tentang cara mengabaikan beberapa file.ext di beberapa direktori tertentu dan pada saat yang sama untuk TIDAK mengabaikannya di tempat lain kemudian masukkan ini ke file /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext ATAU file.ext untuk mengabaikan file di mana-mana dan kemudian di / home / me / path / ke / my / project / some / folder / File .gitignore letakkan ini! file.ext agar TIDAK mengabaikan file ini hanya di direktori ini. Setiap folder dapat memiliki file .gitignore sendiri untuk mengatasi pengaturan orangtua file .gitignore ...
drugan
Hm Ini berarti bahwa repo mungkin berperilaku berbeda tergantung pada apakah pengguna lain memiliki ~/.gitignorefile yang berbeda pada mesin mereka sendiri, kan? .. Selain itu, maksud saya adalah: Anda menulis "Jika solusi di atas tidak berfungsi", mengapa tidak?
iago-lito 'mempertimbangkan meninggalkan
ya, jika proyek Anda mungkin ada di lingkungan yang tidak dikenal maka Anda tidak boleh mengandalkan file .gitignore yang ada di atas folder root proyek Anda. Ingat bahwa nama file seperti config.php sangat umum sehingga menimpa pengaturan yang mungkin ada untuk file ini di file .gitignore root Anda.
Narkoba