Abaikan file yang sudah ditransfer ke repositori Git.

Saya sudah memiliki repositori Git yang sudah diinisialisasi di mana saya menambahkan file .gitignore . Bagaimana cara memperbarui indeks file sehingga file yang ingin saya abaikan diabaikan?

2224
16 июля '09 в 22:26 2009-07-16 22:26 trobrock diatur 16 Juli 2009 pada 10:26 2009-07-16 22:26
ответ 21 jawaban

Untuk melacak satu file yang telah ditambahkan / diinisialisasi ke repositori Anda, mis. Untuk berhenti melacak file, tetapi tidak menghapusnya dari sistem Anda, gunakan: git rm --cached filename

Untuk mem-parsing semua file yang sekarang ada di .gitignore Anda:

Pertama-tama buat perubahan kode yang tertunda , dan kemudian jalankan perintah ini:

 git rm -r --cached . 

Ini menghapus semua file yang dimodifikasi dari indeks (area perantara), dan kemudian meluncurkan:

 git add . 

Perbaiki:

 git commit -m ".gitignore is now working" 

Untuk membatalkan git rm --cached filename , gunakan git add filename .

Pastikan untuk menyelesaikan semua perubahan penting sebelum menjalankan git add. Jika tidak, Anda akan kehi>

3691
16 июля '09 в 22:32 2009-07-16 22:32 balasan diberikan oleh trobrock 16 Juli 2009 di 10:32 2009-07-16 22:32

Jika Anda mencoba mengabaikan perubahan pada file yang sudah dilacak di repositori (misalnya, file properti dev.prop yang Anda perlu ubah untuk lingkungan lokal Anda, tetapi Anda tidak pernah ingin memeriksa perubahan ini), daripada apa yang ingin Anda lakukan adalah:

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

Jika Anda ingin mulai melacak perubahan lagi

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

Lihat halaman manual git -update-index (1) .

Periksa juga no-skip-worktree skip-worktree dan no-skip-worktree untuk indeks pembaruan, jika Anda memerlukannya, untuk menyimpan reset git yang lama ( via )


Pembaruan: Seperti yang ditanyakan orang, berikut adalah alias yang nyaman (dan diperbarui setelah dikomentari di bawah) untuk melihat file mana yang "diabaikan" (- tidak ada perubahan) di area kerja lokal

 $ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]" 
527
06 июля '12 в 20:09 2012-07-06 20:09 jawabannya diberikan dyodji 06 Juli '12 pada 20:09 2012-07-06 20:09

Untuk melacak file yang telah ditambahkan / diinisialisasi ke repositori Anda, yaitu, berhenti melacak file, tetapi jangan menghapusnya dari sistem Anda: git rm --cached filename

351
15 сент. Jawabannya diberikan oleh pagetribe 15 Sep 2010-09-15 02:55 '10 pada 2:55 2010-09-15 02:55

Ya - sistem .gitignore mengabaikan file yang saat ini tidak di bawah kendali versi dari git.

yaitu Jika Anda telah menambahkan file bernama test.txt dengan git-add , kemudian menambahkan test.txt ke .gitignore masih akan mengarah ke pelacakan perubahan ke test.txt .

Pertama, Anda perlu git rm test.txt dan melakukan perubahan ini. Hanya dengan demikian perubahan test.txt akan diabaikan.

78
18 июля '09 в 11:15 2009-07-18 11:15 Jawaban diberikan oleh Antony Stubbs 18 Juli '09 pada 11:15 2009-07-18 11:15

Hapus ruang putih di .gitignore

Juga, pastikan .gitignore Anda tidak memiliki spasi tambahan. Saya sampai pada pertanyaan ini karena saya sedang mencari jawaban, maka itu lucu bagi saya bahwa saya harus membuka editor daripada hanya memotong .gitignore. Menghapus ruang ekstra dari ujung, dan poof bekerja sekarang :)

50
02 февр. Jawabannya diberikan oleh MikeJansen 02 Feb. 2012-02-02 18:59 '12 pada 18:59 2012-02-02 18:59

saya menyelesaikan >

 git rm -r --cached . git add . git reset HEAD 

kemudian git hapus semua file (* .swp dalam kasus saya) yang harus diabaikan.

40
15 июля '11 в 10:22 2011-07-15 10:22 jawabannya diberikan oleh Orlando 15 Juli '11 pada 10:22 2011-07-15 10:22

Jika Anda ingin menghentikan file pelacakan tanpa menghapus file dari sistem lokal, yang saya lebih suka mengabaikan config/database.yml . Coba saja:

 git rm --cached config/database.yml # this will delete your file from git history but not from your local system. 

Tambahkan file ini ke file .gitignore dan lakukan perubahan. Mulai sekarang, perubahan apa pun yang dibuat ke config / database.yml tidak akan dilacak menggunakan git.

 $ echo config/database.yml >> .gitignore 

Terima kasih

37
02 марта '14 в 12:00 2014-03-02 12:00 jawabannya diberikan przbadu 02 Maret '14 pukul 12:00 2014-03-02 12:00

Untuk menghapus hanya beberapa file tertentu:

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

Jika Anda ingin mulai melacaknya lagi:

 git update-index --no-assume-unchanged path/to/file 
28
21 авг. balasan yang diberikan oleh Mark Salvatore 21 Agustus 2013-08-21 17:20 '13 pada 17:20 2013-08-21 17:20

Seperti yang dilaporkan oleh dav_i, untuk menyimpan file ke repo dan masih menghapusnya dari perubahan tanpa membuat komit tambahan, Anda dapat menggunakan:

 git update-index --assume-unchanged filename 
26
17 апр. Balas oleh Iman Mohamadi pada 17 Apr 2015-04-17 10:21 '15 jam 10:21 2015-04-17 10:21

Jawaban komprehensif di mana-mana!

Cukup gunakan yang berikut ini.

 git rm -r --cached . 

Ini akan menghapus file yang Anda coba abaikan dari sumbernya, bukan dari penyihir di komputer Anda!

Setelah itu, cukup kunci dan klik!

25
19 июля '17 в 8:38 2017-07-19 08:38 jawabannya diberikan oleh Ahmad Awais pada 19 Juli '17 di 8:38 2017-07-19 08:38

Tidak tahu apa yang dilakukan perintah "jawab", saya berlari, sangat kecewa. Secara rekursif menghapus setiap file dari repositori git Anda.

Menyimpan ke cadangan ... Cara mengembalikan "git rm -r." ?

 git reset HEAD 

Ini adalah trik, karena saya telah membuka kunci file lokal yang tidak ingin saya timpa.

24
12 апр. Balasan adalah averydev pada 12 April 2011-04-12 23:39 '11 pada 11:39 PM 2011-04-12 23:39

Ada saran lain, mungkin untuk orang lambat seperti saya =) Letakkan file .gitignore di root repositori bukan di .git >. Hore!

23
19 июня '13 в 0:08 2013-06-19 00:08 jawabannya diberikan Olga 19 Juni '13 pada 0:08 2013-06-19 00:08

Tidak ada jawaban yang cocok untuk saya.

Alih-alih

  • Ekstrak file dari direktori yang dikendalikan git
  • Periksa penghapusan git
  • Pindahkan file kembali ke direktori git -controlled

Setelah memindahkan file, git akan mengabaikannya.

Bekerja dengan direktori!

22
15 нояб. Jawabannya diberikan oleh Hunter S 15 Nov. 2015-11-15 07:03 '15 pada 7:03 2015-11-15 07:03

Masalah lain yang saya temui adalah saya memposting komentar sebaris.

 tmp/* # ignore my tmp folder (this doesn't work) 

ini bekerja

 # ignore my tmp folder tmp/ 
20
06 дек. Jawabannya diberikan kindahero 06 Des. 2011-12-06 16:14 '11 pada 16:14 2011-12-06 16:14

Jika file sudah dalam kontrol versi, Anda harus menghapusnya secara manual.

18
16 июля '09 в 22:28 2009-07-16 22:28 Jawaban diberikan oleh Aragorn pada 16 Juli 2009 di 10:28 2009-07-16 22:28

Berkat jawaban Anda, saya bisa menulis satu baris ini untuk memperbaikinya. Saya menjalankannya di .gitignore dan repo saya, dan saya tidak punya masalah, tetapi jika ada yang melihat masalah mencolok, komentar. Ini seharusnya git rm -r --cached dari .gitignore :

cat $ (git rev-parse --show-toplevel) / .gitIgnore | sed "s // $ //" | grep -v "^ #" | xargs -L 1 -I {} find $ (git rev-parse --show-toplevel) -name "{}" | xargs -l 1 git rm -r --cached

Perhatikan bahwa Anda akan mendapatkan banyak fatal: pathspec '<pathspec>' did not match any files . Ini mudah untuk file yang belum dimodifikasi.

13
03 июля '12 в 20:25 2012-07-03 20:25 jawabannya diberikan umop 03 Juli '12 pada 20:25 2012-07-03 20:25

Saya menemukan masalah aneh dengan .gitignore. Semuanya ada di tempatnya dan tampak benar. Satu-satunya alasan .gitignore saya "diabaikan" adalah karena akhir baris ada di Mac-Format (\ r). Oleh karena itu, setelah menyimpan file dengan ujung yang benar (in vi menggunakan: set ff = unix), semuanya bekerja seperti pesona!

10
02 марта '12 в 12:56 2012-03-02 12:56 Jawaban diberikan oleh Johannes Vetter pada 02 Maret 2012 di 12:56 2012-03-02 12:56

Masalah lain yang tidak disebutkan di sini adalah Anda membuat .gitignore di Windows Notebook, yang saya pelajari mungkin terlihat seperti omong kosong di platform lain. Kuncinya adalah memastikan bahwa pengkodean diatur ke ANSI di Notepad (atau buat file di linux, sama seperti saya).

Dari jawaban saya di sini: encoreci.net.site/questions/2007 / ...

9
21 мая '13 в 12:43 2013-05-21 12:43 jawabannya diberikan oleh Matt Parkins 21 Mei 13 di 12:43 2013-05-21 12:43

Di server server linux saya (tidak benar pada master dev lokal saya), direktori diabaikan sampai saya menambahkan tanda bintang:

WWW / arsip / *

Saya tidak tahu mengapa, tetapi itu membuat saya kehi>

8
09 марта '13 в 9:36 2013-03-09 09:36 jawabannya diberikan ndemoreau 09 Maret '13 di 9:36 2013-03-09 09:36

Harus diingat bahwa jika .gitignore tampaknya tidak mengabaikan file tanpa jejak, Anda tidak boleh memiliki komentar di baris yang sama dengan abaikan. Jadi itu tidak masalah

 # ignore all foo.txt, foo.markdown, foo.dat, etc. foo* 

Tetapi itu tidak akan berhasil:

 foo* # ignore all foo.txt, foo.markdown, foo.dat, etc. 

.gitignore mengartikan kasus terakhir sebagai "abaikan file dengan nama "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." , yang tentu saja tidak Anda miliki.

6
20 февр. Jawabannya diberikan oleh Gabriel Perdue pada 20 Feb. 2016-02-20 01:52 '16 pada 1:52 2016-02-20 01:52

Jika Anda perlu berhenti melacak banyak file yang diabaikan, Anda dapat menggabungkan beberapa perintah:

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

Ini akan berhenti melacak file yang diabaikan. Jika Anda ingin menghapus file dari sistem file, jangan gunakan --cached . Anda juga dapat menentukan folder untuk membatasi pencarian, misalnya:

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

4
20 апр. Jawabannya diberikan oleh Etherealone 20 Apr. 2017-04-20 09:18 '17 pada 9:18 2017-04-20 09:18

Pertanyaan lain tentang tag atau Tanyakan Pertanyaan