İzlədiyi bir fayl haqqında Git'i "unutma" etməliyəm amma indi .gitignore'da mı?

git tərəfindən izlənilən bir fayl var, ancaq indi fayl .gitignore siyahısında.

Buna baxmayaraq, bu fayl onu redaktə etdikdən sonra git status göstərilməyə davam edir. Necə git tamamilə bu barədə unutmaq?

4082
13 авг. İvan 13 aug qurdu . 2009-08-13 22:23 '09 at 10:23 AM 2009-08-13 22:23
@ 22 cavab

.gitignore izlənməmiş faylları əlavə etməkdən ( add -f olmadan) git tərəfindən izlənən faylların dəstəyinə mane olur, lakin git artıq izlənilən faylları izləmək üçün davam edəcək.

Bir dosyanın izlənilməsini dayandırmaq üçün onu indeksdən çıxarmaq lazımdır. Bu əmri istifadə etmək mümkündür.

 git rm --cached <file> 

Revizyon başlığından bir faylın silinməsi növbəti törətmədə baş verəcəkdir.

Qeyd: Bu, yerli dosyanızdakı fiziki faylları aradan qaldıra bilməyəcək, baxmayaraq ki, sonrakı git pull olan digər developers 'maşınlarından faylları git pull .

4329
13 авг. CB Bailey tərəfindən verilmiş cavab 13 Avqust 2009-08-13 23:40 '09 at 11:40 pm 2009-08-13 23:40

Aşağıdakı əmrlər sırasına görə, Git indeksindəki bütün maddələr silinəcək (işçi qovluğundan və ya yerli repodan), sonra Git indeksi gözardı edilərkən Git indeksi yenilənəcək. Ps. İndeks = Cache

Birincisi:

 git rm -r --cached . git add . 
border=0

Sonra:

 git commit -am "Remove ignored files" 
2209
30 сент. Cavab Matt Frear 30 sep tərəfindən verilir . 2013-09-30 16:51 '13 at 16:51 2013-09-30 16:51

git yeniləmə indeksində mənim üçün bütün işlər var:

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

Qeyd Bu çözüm, gitignore yalnız izinsiz fayllar üçün nəzərdə tutulduğundan, .gitignore faktiki olaraq müstəqildir.

dəyişiklik: bu cavab yayımlanandan bəri yeni bir seçim yaradıldı və bu, üstünlük təşkil edilməlidir. İstifadəçi --skip-worktree dosyalar üçün nəzərdə tutulmuş, user-to --assume-unchanged və git daha yaxşı performans üçün --assume-unchanged saxlayır, belə ki, git, böyük monitorinq edilmiş faylların vəziyyətini --assume-unchanged . Daha ətraflı məlumat üçün on123.ru.site/questions/1817 / ... baxın ...

 git update-index --skip-worktree <file> 
830
27 нояб. cavab Konstantin 27 noyabrda verilir . 2013-11-27 14:24 '13 'da 14:24 2013-11-27 14:24
 git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached git commit -am "Remove ignored files" 

Bu, edilməmiş faylların siyahısını alır və onları indeksdən çıxarır və sonra dəyişiklikləri yerinə yetirir.

237
24 мая '14 в 1:29 2014-05-24 01:29 Cavab 24 may, 24 saat 1:29 2014-05-24 01:29 tarixində verilir

Mən həmişə bu əmrdən istifadə edərək, bu unplayable faylları silmək üçün istifadə edirəm. Tek xətt, Unix-stil, təmiz çıxış:

 git ls-files --ignored --exclude-standard | sed 's/.*/" | xargs git rm -r --cached 

Bütün fayllar siyahıda yerləri ilə işləyən yolları git rm -r --cached və hər bir yola keçmək üçün git rm -r --cached olan yolları / faylları / git rm -r --cached üçün hər bir çıxış xətti əvəzinə quotes ilə əvəz olunur.

62
19 июня '15 в 18:42 2015-06-19 18:42 Cavab David Hernandez tərəfindən 19 İyun 'da saat 18:42' də verildi. 2015-06-19 18:42

Başqa bir git rm --cached lazım ola biləcəyi təqdirdə git rm --cached (xəbərdarlıq olsa da, başqası bu dəyişiklik qəbul edildikdə git rm --cached , faylları fayl sistemində silinəcəkdir). Bu, tez-tez konfiqurasiya faylını, identifikasiya etmə sənədlərini və s. İnsanları problemi atdıqları yollar üçün https://gist.github.com/1423106 səhifəsinə baxın .

Xülasə:

  • Tətbiqinizdən itkin config-overide.ini faylını tapmaq və onu əldə edilən config.ini faylından istifadə edin (və ya alternativ olaraq ~ / .config / myapp.ini və ya $ MYCONFIGFILE)
  • Config-sample.ini faylını düzəlt və config.ini faylını görməməsə, zəruri hallarda kopyalamaq üçün bir skript və ya oxşar fayl yaradın.
  • Dəyişiklikləri tətbiq etmək və aradan qaldırmaq üçün, məsələn, konfiqurasiya faylını alternativ şöbədən çıxarış kimi ləğv edin və HEAD-dən çıxarış kimi konfiqurasiya faylını təmizləyin. Bu çətin bir şeydir, bir təcrübəsiz istifadəçi üçün məsləhət görmürəm.
  • Konfiqurasiya faylını heç vaxt master ilə birləşməyəcək xüsusi yerləşdirmə şöbəsinə saxlayın. Siz yerləşdirmək / tərtib etmək / test etmək istədiyiniz zaman, bu filialla birləşdirin və bu faylı əldə edin. Əslində, bu insanlar birləşmə siyasətini və əlavə git modullarını istifadə istisna olmaqla, ləkə / təmiz yanaşma.
  • Anti-tövsiyə edən: dəyişiklik etmədən fərziyyələr istifadə etməyin, yalnız gözyaşları ilə sona çatacaqdır (çünki yalançı yalanlar pis şeylərə səbəb ola bilər, çünki dəyişikliklər əbədi olaraq itəcəkdir).
53
19 июля '12 в 3:08 2012-07-19 03:08 Cavab Seed Robertson tərəfindən 19 iyul '12 'də 3:08' də verildi 2012-07-19 03:08

hərəkət et, kilidləyin və sonra qaytarın. Keçmişdə mənim üçün çalışdı. Bunun üçün gittier üçün bir yol var.

51
13 авг. Joel Hooks tərəfindən verilmiş cavab 13 Avqust 2009-08-13 22:27 '09 saat 22:27 'da 2009-08-13 22:27

Aşağıdakıları istifadə edin:

1. Bir çox fayl və ya formatlaşdırmaq istəyirəm

2. Sizin gitignore faylınızı güncəlləşdirdiniz

Mənbə bağlantısı: http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/

Git deposuna bəzi fayllar əlavə etdiyiniz / köçürdünüz və sonra da bu səhifənizi əlavə edin. bu fayllar sənin saxlama indeksində hələ də olacaqdır. Bu yazıda bunlardan necə xilas olacağımızı görəcəksiniz.

Addım 1: Bütün dəyişikliklərinizi yerinə yetirin.

Davam etmədən əvvəl, bütün dəyişiklikləriniz .gitignore faylını da daxil olmaqla əmin olun.

Addım 2. Depolardan hər şeyi çıxarın.

Repounuzu təmizləmək üçün aşağıdakıları istifadə edin:

 git rm -r --cached . 
  • rm - silmək əmri
  • -r recursive silinməyə imkan verəcəkdir
  • -Cached yalnız faylları indeksdən çıxaracaq. Fayllarınız hələ də orada olacaq.

rm komandası dözümsüz ola bilər. Əvvəlcədən nə etdiyinizi sınamaq istəyirsinizsə, hər şeyi yoxlamaq üçün -n və ya - --dry-run əlavə edin.

Addım 3: Bütün əlavə et

 git add . 

Addım 4: Fix

 git commit -m ".gitignore fix" 

Depounuz təmizdir :)

Həm də orada təsirli olan dəyişiklikləri görmək üçün uzaqdan idarəedəki dəyişiklikləri basın.

40
22 апр. Dheeraj Bhaskar tərəfindən 22 apreldə cavab verildi 2018-04-22 21:11 '18 at 9:11 pm 2018-04-22 21:11

Mənim üçün nə işləmirdi

(Linux-da) ls-files --ignored --exclude-standard | xargs git rm -r --cached təklif edən mesajları istifadə etmək istəmişdim ls-files --ignored --exclude-standard | xargs git rm -r --cached . Bununla belə, silinəcək faylların (bəzi) adları yeni lövhə / LF / \n simvolları olub. Çözümün heç biri:

 git ls-files --ignored --exclude-standard | xargs -d"\n" git rm --cached git ls-files --ignored --exclude-standard | sed 's/.*/" | xargs git rm -r --cached 

bu vəziyyətlə məşğul olmaq (faylları tapmayan səhvlər almaq).

Buna görə də təklif edirəm

 git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached 

-z -faylları üçün -z arqumentini istifadə edir və -0 arqument filenamesdə "pis" simvollar üçün təhlükəsiz / düzgün istifadə etmək üçün xargs istifadə edir.

Git-ws-faylları (1) əl-səhifə deyir:

-Z variantının istifadə edilmədiyi təqdirdə, TAB, LF və terslik simvolları sırası ilə \ t, \ n və \\ kimi göstərilir.

belə ki, fayl adları bu simvollardan birinə malikdirsə, mənim həllim lazımdır.

EDIT: Mənə hər hansı bir git rm komandası kimi əlavə etmək istəndi - məsələn, aradan qaldırılması daimi işləməlidir. git commit -am "Remove ignored files" .

38
29 дек. Cavab 29 dekabrda JonBrave tərəfindən verilir . 2015-12-29 15:50 '16 'da 15:50' de, 2015-12-29 15:50

Mən filtrin keç filasını istifadə etdim. Mən istifadə edilən dəqiq əmr adam səhifəsindən alınmışdır:

XƏBƏRDARLIQ : bu faylın bütün tarixdən silinəcəkdir.

 git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD 

Bu əmr, hər bir işə başlamazdan əvvəl git rm ni işləyərək bütün öhdəçilik tarixini yaradır və dolayısı ilə göstərilən faylın sahibidir. Komanda işləməzdən əvvəl, zəifliyi unutmağı unutmayın.

35
13 авг. Cavab verilir drrlvn 13 aug. 2009-08-13 22:35 '09 at 10:35 AM 2009-08-13 22:35
  • .gitignore faylını yeniləyin - məsələn, izləmək .gitignore bir qovluq əlavə edin .gitignore .

  • git rm -r --cached . - İstenmeyen və istenmeyen də daxil olmaqla bütün izlənilən faylları silin. Yerli olaraq saxladığınız təqdirdə kodunuz təhlükəsiz olacaq.

  • git add . - Bütün fayllar, .gitignore göstərilənlər istisna olmaqla, geri əlavə olunacaq.


Tipi @AkiraYamamoto şapka doğru istiqamətə baxacaq.

18
04 апр. cavab Chen_Wayne 04 apr verilir . 2016-04-04 07:09 '16 at 7:09 2016-04-04 07:09

Hesab edirəm ki, konsepti ( "Şəkillər deyil, Fərqlər" bölməsi ) səbəbiylə git faylını tamamilə unuta bilməz.

Məsələn, CVS istifadə edərkən bu problem yoxdur. CVS faylları dəyişikliklərin bir fayl siyahısı kimi saxlayır. CVS üçün məlumatlar faylların toplusudur və hər bir faylda vaxt keçdikcə dəyişikliklər edilir.

Gitdə, layihənin vəziyyətini hər dəfə törətdiyinizdə və ya saxladığınızda, əsasən, bütün fayllarınızın bu ankı kimi göründüyü bir şəkil çəkir və bu anlıq bir keçid saxlayır. Beləliklə, bir dəfə fayl əlavə etsəniz, həmişə bu anlık görüntüdə iştirak edəcək.

Bu iki məqalə mənə faydalı idi:

go git-no dəyişiklik və skip-worktreegit istifadə izlenen faylları dəyişikliklər ignore necə

Buna əsasən, fayl zaten izlendiğinde aşağıdakıları edirəm:

 git update-index --skip-worktree <file> 

Bu nöqtədən bu fayldakı bütün yerli dəyişikliklər nəzərə alınmayacaq və silinməyəcəkdir. Fayl uzaqdan dəyişdirildiyi təqdirdə, git pull çıxdıqda bir qarşıdurma baş verəcək. Stop işləməyəcək. Problemi həll etmək üçün faylın məzmununu təhlükəsiz yerə kopyalayın və aşağıdakı adımları edin:

 git update-index --no-skip-worktree <file> git stash git pull 

Dosyanın məzmunu silinmiş məzmunla əvəz olunacaq. Değişikliklerinizi güvenli bir yerden dosyaya yapıştırın ve yeniden çalıştırın:

 git update-index --skip-worktree <file> 

Layihə ilə işləyən hər kəs git update-index --skip-worktree <file> ilə bağlı heç bir problem yoxdur. Hər bir proqramın öz layihə konfiqurasiyasına malik olduqda bu həll konfiqurasiya faylları üçün uygundur.

Bu uzaq bir kompüterdə bir fayl dəyişdirildiyi zaman hər şeyi etmək çox rahat deyil, ancaq onu uzaq məzmunda yazmaqdan qoruya bilər.

12
21 мая '17 в 18:12 2017-05-21 18:12 Cavab Boolean_Type 21 may, 17 saat 6:12 2017-05-05 18:12 verilir

Kopyala / Yapıştır Cavab: git rm --cached -r.; git add.; git status git rm --cached -r.; git add.; git status git rm --cached -r.; git add.; git status git rm --cached -r.; git add.; git status git rm --cached -r.; git add.; git status

Bu əmr artıq Git deposuna köçürülmüş faylları görməyəcək, lakin indi biz onları .gitignore əlavə etdik.

5
19 нояб. Cavab 19-cu il təqaüdçüsü tərəfindən verilir 2018-11-19 14:21 '18 saat 02:21 'da 2018-11-19 14:21

Matt Qorxudan cavab ən təsirli IMHO idi. Yalnız Windows-da, onların istisna siyahısına cavab verən faylları, git qovşağından silinənlər üçün yalnız bir PowerShell skriptidir.

 # Get files matching exclusionsfrom .gitignore # Excluding comments and empty lines $ignoreFiles = gc .gitignore | ?{$_ -notmatch "#"} | ?{$_ -match "\S"} | % { $ignore = "*" + $_ + "*" (gci -r -i $ignore).FullName } $ignoreFiles = $ignoreFiles| ?{$_ -match "\S"} # Remove each of these file from Git $ignoreFiles | % { git rm $_} git add . 
5
25 дек. Cavab Ameer Deen tərəfindən verilir 25 dekabr. 2013-12-25 03:51 '13 at 3:51 2013-12-25 03:51

Kaybolmadığınız üçün faylı təhlükəsiz bir yerə daşıyın və ya kopyalayın. Sonra rm faylını yükləyin və əməl edin. Daha əvvəl bu vəzifələrdən birinə və ya silinməmiş olduğu başqa bir şəxsə qayıtsanız fayl göstəriləcək. Lakin, bütün gələcək əməllərdə, faylı yenidən görməyəcəksiniz. Fayl girməyincə gözardı edərsə, onu qovluğa köçürə bilərsiniz və git onu görməyəcək.

5
13 авг. Apreche tərəfindən verilmiş cavab 13 Avqust 2009-08-13 22:27 '09 saat 22:27 'da 2009-08-13 22:27

Aşağıdakı addımları növbə ilə yerinə yetirin, hər şey yaxşı olacaq.

1. Dizindən / saxlanmadan yanlış şəkildə əlavə edilmiş faylları silin . Siz rm -r komutunu (linux üçün) istifadə edə bilərsiniz və ya kataloqları gözdən keçirərək onları silin.

Gitaddor faylında faylları / gitignore və onu saxlaya bilərsiniz.

3. İndi bu komutları istifadə edərək onları önbellekten silmək (bir neçə qovluq varsa, onları bir-bir silin, bu komandanı yenidən buraxın)

 git rm -r --cached path-to-those-files 

4. İndi əməl edin və basın , bu əmrləri istifadə edin. Bu, bu faylları uzaqdan çıxardır və bu faylları izleməyini dayandırmaq üçün getməyə səbəb olur.

 git add . git commit -m "removed unnecessary files from git" git push origin 
3
20 сент. Cavab Şamsul Arefin Sajib tərəfindən verilib. 2018-09-20 13:52 '18 saat 13:52 'də 2018-09-20 13:52

BFG xüsusi olaraq Git deposundan olan böyük faylları və ya parolları istənməyən məlumatları silmək üçün nəzərdə tutulmuşdur, belə ki, hər hansı bir böyük tarixi faylları (mövcud deyil) silmək üçün sadə bir bayraq var: "-strip-blobs-more-than"

 $ java -jar bfg.jar --strip-blobs-bigger-than 100M 

Faylları adla göstərmək istəyirsinizsə, bunu da edə bilərsiniz:

 $ java -jar bfg.jar --delete-files *.mp4 

BFG Git filtr filialına nisbətən 10-1000x daha sürətlidır və istifadə etmək daha asan olur - ətraflı məlumat üçün nümunələritam istifadə üçün təlimatları nəzərdən keçirin.

Mənbə: https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html

3
03 сент. Meir Gerenstadt tərəfindən verilmiş cavab 03 Sep. 2017-09-03 15:37 '17 də 3:37 pm 2017-09-03 15:37

Mən JonBrave-dən cavabını çox sevdim, amma düzəldən çox pis iş rehberler var - a, bu məni bir az qorxudur, buna görə də mən nə edirəm:

git config --global alias.exclude-ignore '! git ls-faylları -z - işarəsi - standart məzmun | xargs -0 git rm -r -cached git ls-files -z -ignored -exclude-standard | xargs -0 git mərhələsi git stage.gitignore git commit -m "yeni gitignore və qeydsiz faylları indeksdən sil"

məhv:

 git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached git ls-files -z --ignored --exclude-standard | xargs -0 git stage git stage .gitignore git commit -m "new gitignore and remove ignored files from index" 
  • laqeyd faylları endeksdən çıxarın
  • Stage.gitignore və yalnız sildiyiniz fayllar.
  • törətmək
2
08 авг. Cavab Jay Irvine 08 aug tərəfindən verilir . 2018-08-08 23:49 '18 at 11:49 PM 2018-08-08 23:49

CLI istifadə etmək və Windows ilə işləmək istəmirsinizsə, TortoiseGit- dən istifadə etmək çox sadə bir həlldir, yaxşı işləyən menyuda "Delete (local save)" hərəkətinə malikdir.

2
15 марта '18 в 14:04 2018-03-15 14:04 Cavab Pedi T tərəfindən verilir. 15 mart '18, saat 14:04 'də 2018-03-15 14:04

Bu, sonuncu dəfə (yazı zamanı v2.17.1) artıq bir problem deyil .

.gitignore izlənilən faylları yox sayır, ancaq silinir. Aşağıdakı scripti çalıştırarak bunu özünüz doğrulayırsınız. Son git status ifadəsi "heç bir şey etməyin" demək lazımdır.

 # Create empty repo mkdir gitignore-test cd gitignore-test git init # Create a file and commit it echo "hello" > file git add file git commit -m initial # Add the file to gitignore and commit echo "file" > .gitignore git add .gitignore git commit -m gitignore # Remove the file and commit git rm file git commit -m "removed file" # Reintroduce the file and check status. # .gitignore is now respected - status reports "nothing to commit". echo "hello" > file git status 
1
13 июня '18 в 19:21 2018-06-13 19:21 Lloyd tərəfindən 13 İyun '18' də saat 7: 21 'də 2018-06-13 19:21' də cavab verildi

DS_Store edilmiş bir DS_Store halında:

 find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch 

Onları görməyin:

 echo ".DS_Store" >> ~/.gitignore_global echo "._.DS_Store" >> ~/.gitignore_global echo "**/.DS_Store" >> ~/.gitignore_global echo "**/._.DS_Store" >> ~/.gitignore_global git config --global core.excludesfile ~/.gitignore_global 

Nəhayət, düzəldin!

0
23 апр. cavab user7718859 23 apr tərəfindən verilir . 2018-04-23 00:14 '18 'də 0:14 2018-04-23 00:14' da

Mac haqqında:

 $ git --version git version 2.6.4 $ uname -a Darwin MUSRV186016-382 14.5.0 Darwin Kernel Version 14.5.0: Sun Sep 25 22:07:15 PDT 2016; root:xnu-2782.50.9~1/RELEASE_X86_64 x86_64 

1. Foo filialında git tərəfindən izlənilən fayllar siyahısından DS_Store fayllarını silin:

 $ for file in $(git ls-tree -r foo --name-only | grep -i DS_Store); do git rm --cached $file; done 

2. Komitə:

 $ git commit -m "Removed .DS_Store files" 

3. Faylların artıq izlənilmədiyini yoxlayın.

 $ git ls-tree -r foo --name-only # There should not be anything coming back 

4. Konsoldan çıxarmaq üçün basın:

 $ git push 
-5
13 янв. Raphvanns tərəfindən verilmiş cavab yanvar 13 2017-01-13 22:53 '17 'da 10:53' də 2017-01-13 22:53 'də

Tags haqqında suallar və ya bir sual