Simpan file yang diabaikan dari status git

133

Saya ingin menghentikan Git agar tidak menampilkan file yang diabaikan git status, karena memiliki banyak dokumentasi dan file konfigurasi dalam daftar file yang Diubah tetapi tidak diperbarui , membuat daftar menjadi setengah tidak berguna.

Apakah normal bagi Git untuk menampilkan file-file ini?

Saya meletakkan informasi pengabaian dalam .gitignorefile di direktori root dari repositori Git dan mereka tidak ditambahkan ketika menggunakan git add .tetapi tampaknya mereka juga tidak sepenuhnya diabaikan, karena mereka muncul dalam daftar yang disebutkan di atas dan tidak muncul dalam daftar. dicetak oleh git ls-files --others -i --exclude-standard. Hanya file yang cocok dengan pola yang ~/.gitignoreditampilkan di sana.

Mungkinkah karena pada tahap awal saya tidak mengabaikan mereka dan mereka melakukannya setidaknya sekali?

knuton
sumber

Jawaban:

231

Seperti yang saya temukan dalam posting ini , .gitignorehanya berfungsi untuk file yang tidak dilacak. Jika Anda menambahkan file ke repositori, Anda dapat:

git update-index --assume-unchanged <file>

atau hapus dari repositori oleh

git rm --cached <file>

Edit

Artikel ini juga menjelaskan hal itu

MBO
sumber
4
pembaruan-indeks bekerja untuk saya. Masalah serupa di mana status git menunjukkan file yang diabaikan ... sangat menjengkelkan. +1
Abe Petrillo
3
Saya masih memiliki masalah ini. Tak satu pun dari perintah di atas bekerja untuk saya. Dalam kedua kasus, git mengatakan tidak memiliki pengetahuan tentang file yang dimaksud tetapi mereka masih muncul dalam status git :(
Cfreak
5
@Cfreak Apakah git status -- <file>menampilkan "Perubahan yang tidak dilakukan untuk komit" atau "File yang tidak dilacak" untuk file Anda? Yang pertama adalah jika Anda sudah memiliki file dalam indeks dan saya akan membutuhkan lebih banyak informasi untuk menyelesaikan masalah Anda (lebih baik buat pertanyaan terpisah dengan pesan git yang ditampilkan dan cukup kirim tautan ke dalamnya dalam komentar). Nantinya adalah untuk file yang tidak dilacak oleh git (belum), tetapi tidak dalam .gitignorefile dan dapat dengan bebas ditambahkan ke indeks.
MBO
1
@ MOBO - ya itu. Terima kasih! Komentar Anda membantu saya menemukan jawaban ini: stackoverflow.com/questions/594757/… yang bekerja untuk saya.
Cfreak
1
Opsi pertama bekerja seperti pesona. Saya sudah mencoba yang kedua, dan itu menyebabkan file dipentaskan sebagai "dihapus" dan saya pasti tidak menginginkannya.
Carrm
16

Saya mengalami masalah ini juga, mungkin karena Anda menambahkan direktori / file yang diabaikan ke .gitignore setelah ditandai sebagai "dilacak" oleh GIT dalam alur komit awal.

Jadi, Anda perlu menghapus cache pelacakan git seperti:

git rm --cached -r [folder/file name]

Penjelasan lebih rinci dapat dibaca di sini: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

Perintah di atas juga menghapus sisa folder / file dari asal GIT Anda. Jadi repositori GIT Anda menjadi bersih.

newbreedofgeek
sumber
11

Masalahnya bisa jadi file ini masih dalam cache git. Untuk mengatasi masalah ini perlu mengatur ulang git cache.

Setel ulang git cache. Ini menghapus semuanya dari indeks.

git rm -r --cached . 

Tambahkan semua file lagi:

git add . 

Melakukan:

git commit -m ".gitignore was fixed." 
Ramis
sumber
2

Ini pasti berhasil,

git rm --cached -r [folder/file name]

Usman
sumber
1

Saya berasumsi Anda tidak ingin menambahkan direktori tmp (Visual Studio Platform)

1- tambahkan baris di bawah ini ke file .gitignore lokal Anda

## ignore tmp
/tmp/
./tmp/

3 - backup dan hapus Folder tmp secara lokal. (Cadangkan di tempat lain. Mis. Desktop?)

4- Mengkomit Perubahan ke Lokal daripada Sinkronisasi ke Jarak Jauh (mis. Github).

Setelah langkah-langkah ini direktori tmp Anda tidak akan diunggah lagi.

Kursat Turkay
sumber
0

Dari man git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Secara pribadi saya cenderung menyimpan file doxygen di pohon sumber saya, jadi saya hanya menambahkan ini ke .gitignore saya (yang ada di direktori teratas dari pohon sumber saya):

docs/*

Semoga itu bisa membantu.

BastiBen
sumber
0

Langkah-langkah berikut hanya berfungsi untuk file yang tidak dilacak . Info ini berlaku untuk konfigurasi berikut:

Platform: linux

Git version: git version 1.8.3.1

Masukkan daftar file yang akan diabaikan dalam file "kecualikan" yang ada di lokasi berikut.

<path till .git directory>/.git/info/exclude

Konten awal dari file "kecualikan"

# 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]
# *~

Konten akhir dari file "kecualikan"

# 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]
# *~


*.tar
*.gch
harshul ar
sumber
0

Sesuai jawaban yang diterima, Anda dapat menganggap file sebagai tidak berubah , sehingga apa pun yang Anda lakukan pada mesin lokal Anda tidak dikomit ke cabang jauh Anda.

Sesuatu seperti di git update-index --assume-unchanged src/main/resources/config.properties mana src / main.resources / config.properties adalah contoh path untuk menemukan file itu di dalam proyek Anda.

Sekarang, jika Anda ingin menghapus file sepenuhnya dari repositori Anda, Anda mungkin ingin menggunakan remove cachedsebagai ganti dari `git rm --cached

Skenario ini dapat diterapkan pada situasi berikut:

Misalkan saya memiliki file tempat saya menyimpan kata sandi. Saya awalnya mengkomit file itu dengan detail yang salah, jadi kolega saya punya file yang sama di mesin mereka. Namun, sekarang saya telah menambahkan detail yang benar pada mesin lokal saya. Bagaimana saya mencegah file itu tidak sengaja dilakukan lagi dengan perincian kata sandi yang sekarang benar?

Francislainy Campos
sumber
-1

seperti ini

git --ignored myfolder

Dan akan menunjukkan status hanya untuk folder saya

Alex
sumber