Paano ko makagawa ng "kalimutan" ang Git tungkol sa isang file na sinusubaybayan, ngunit ngayon ay nasa .gitignore?

May isang file na sinusubaybayan ng git , ngunit ngayon ang file ay nasa listahan ng .gitignore .

Gayunpaman, ang file na ito ay patuloy na ipapakita sa git status pagkatapos na i-edit ito. Paano mo gagawa ang git ganap na kalimutan ang tungkol dito?

4082
13 авг. set Ivan 13 aug. 2009-08-13 22:23 '09 at 10:23 AM 2009-08-13 22:23
@ 22 mga sagot

.gitignore pipigilan ang mga naka-untrack na file mula sa idinagdag (wa>add -f ) sa hanay ng mga file na sinubaybayan ng git, ngunit git ay patuloy na susubaybayan ang anumang mga file na sinusubaybayan na.

Upang ihinto ang pagsubaybay ng isang file, kai>

 git rm --cached <file> 

Ang pagtanggal ng isang file mula sa header ng pagbabago ay magaganap sa susunod na gumawa.

TANDAAN: Bagaman hindi nito aalisin ang pisikal na file mula sa iyong lokal na file, tatanggalin nito ang mga file mula sa iba pang mga machine ng mga developer na may susunod na git pull .

4329
13 авг. Sumagot na ibinigay ng CB Bailey Agosto 13 2009-08-13 23:40 '09 sa 11:40 pm 2009-08-13 23:40

Sa pagkakasunud-sunod ng mga utos sa ibaba, ang lahat ng mga item mula sa index ng Git ay tatanggalin (hindi mula sa nagtatrabaho na direktoryo o lokal na repo), at pagkatapos ay maa-update ang Git index, habang ang Git ay hindi papansinin. Ps. Index = Cache

Una:

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

Pagkatapos:

 git commit -am "Remove ignored files" 
2209
30 сент. Ang sagot ay ibinigay ni Matt Frear 30 sep . 2013-09-30 16:51 '13 sa 16:51 2013-09-30 16:51

git update index ay ang lahat ng mga trabaho para sa akin:

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

Tandaan Ang solusyon na ito ay halos independiyenteng ng .gitignore Gitignore bi>

baguhin: dahil ang tugon na ito ay na-publish, isang bagong pagpipilian ay nilikha, at ito ay dapat na ginustong. Dapat mong gamitin ang --skip-worktree na nilayon para sa mga binagong sinusubaybayan na mga file na hindi na nais na ayusin ng user, at sine-save --assume-unchanged para sa mas mahusay na pagganap, sa gayon ay hindi sinusuri ng git ang katayuan ng mga malalaking sinusubaybayan na mga file. Tingnan ang lifetop.pw.site/questions/1817 / ... para sa karagdagang impormasyon ...

 git update-index --skip-worktree <file> 
830
27 нояб. ang sagot ay ibinigay kay Konstantin Nobyembre 27. 2013-11-27 14:24 '13 sa 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" 

Ito ay tumatagal ng isang listahan ng mga hindi pinansin na mga file at inaalis ang mga ito mula sa index, at pagkatapos ay gumawa ng mga pagbabago.

237
24 мая '14 в 1:29 2014-05-24 01:29 Ang sagot ay ibinigay thSoft Mayo 24, '14 sa 1:29 2014-05-24 01:29

Palagi kong gagamitin ang command na ito upang tanggalin ang mga hindi mai-play na file na ito. Single-line, Unix-style, malinis na output:

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

Inililista nito ang lahat ng iyong mga hindi pinansin na mga file, na pinalitan ng isang linya na may mga panipi sa halip ng bawat linya ng output upang maproseso ang mga landas na may mga puwang sa loob at pumasa sa lahat ng bagay sa git rm -r --cached upang alisin ang mga path / file / mga direktoryo mula sa index.

62
19 июня '15 в 18:42 2015-06-19 18:42 Ang sagot ay ibinigay ni David Hernandez noong Hunyo 19 '15 sa 6:42 ng 2015-06-19 18:42

Kung hindi mo ma- git rm sinusubaybayan na file dahil maaaring kai>git rm --cached kapag may iba pang natanggap na pagbabago na ito, ang mga file nito ay tatanggalin sa kani>https://gist.github.com/1423106 para sa mga paraan kung saan ang mga tao ay na-bypass ang problema.

Sa kabuuan:

  • Tanungin ang iyong aplikasyon upang mahanap ang nawawa>
  • Ayusin ang config-sample.ini file at huwag pansinin ang config.ini file, kung kinakai>
  • Subukang gamitin ang gitattributes clean / smudge magic upang ilapat at alisin ang mga pagbabago, halimbawa, lumabo ang configuration file bi>
  • I-save ang configuration file sa nakalaang branch ng pag-deploy nito, na hindi kailanman ipagsasama sa master. Kapag nais mong i-deploy / sumulat ng libro / pagsubok, sumama ka sa branch na ito at makuha ang file na ito. Sa kakanyahan, ito ay ang smudge / malinis na diskarte, maliban sa paggamit ng mga tao pagsamahin ang mga patakaran at karagdagang git modules.
  • Anti-recommender: huwag gumamit ng mga pagpapalagay nang wa>
53
19 июля '12 в 3:08 2012-07-19 03:08 Ang sagot ay ibinigay ni Seth Robertson noong Hulyo 19 '12 sa 3:08 2012-07-19 03:08

ilipat ito, i-lock ito, at pagkatapos ay ibalik ito. Nagtrabaho ito para sa akin sa nakaraan. Marahil ay isang paraan para sa gmitier upang gawin ito.

51
13 авг. Sumagot na ibinigay ni Joel Hooks Agosto 13 2009-08-13 22:27 '09 at 10:27 pm 2009-08-13 22:27

Gamitin ito kapag:

1. Gusto mong mag-format ng maraming mga file o

2. Na-update mo ang iyong gitignore file

Pinagmulan na link: http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/

Ipagpalagay na nagdagdag ka na / naglipat ng i>

Hakbang 1: Ibigay ang lahat ng iyong mga pagbabago.

Bago magpatuloy, siguraduhin na ang lahat ng iyong mga pagbabago ay ginawa, kasama ang .gitignore file.

Hakbang 2. Alisin ang lahat mula sa repository.

Upang i-clear ang iyong repo, gamitin ang:

 git rm -r --cached . 
  • rm - tanggalin ang command
  • -r ay magpapahintulot sa recursive deletion
  • -Kakaalis lamang ang mga file mula sa index. Ang iyong mga file ay mananatili pa rin doon.

Ang utos ng rm ay maaaring hindi mapakali. Kung nais mong subukan kung ano ang ginagawa nito nang maaga, idagdag ang -n o --dry-run upang suriin ang lahat.

Hakbang 3: Idagdag Lahat

 git add . 

Hakbang 4: Ayusin

 git commit -m ".gitignore fix" 

Ang iyong lalagyan ay malinis :)

Mag-click sa mga pagbabago sa remote control upang makita ang mga pagbabago na epektibo rin doon.

40
22 апр. Sumagot na ibinigay ni Dheeraj Bhaskar noong Abril 22 2018-04-22 21:11 '18 sa 9:11 ng gabi 2018-04-22 21:11

Ano ang hindi gumagana para sa akin

(Sa Linux) Nais kong gumamit ng mga mensahe na nagmumungkahi ng ls-files --ignored --exclude-standard | xargs git rm -r --cached ls-files --ignored --exclude-standard | xargs git rm -r --cached . Gayunpaman, (ilan sa) ang mga file na matatanggal ay may bagong linya / LF / \n character na naka-embed sa kani>

 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 

harapin ang sitwasyong ito (makakuha ng mga error tungkol sa mga file na hindi natagpuan).

Samakatuwid, iminumungkahi ko

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

Ginagamit nito ang -z argument para sa ls-files , at ang -0 argument ay gumagamit ng xargs sa ligtas / wastong paggamit para sa "mga bastos" na mga character sa mga filename.

Ang mga git-ws-files (1) ay nagpapahiwatig ng manu-manong pahina:

Kung hindi ginagamit ang opsyon na -z, ang TAB, LF, at backslash na mga character sa mga pathname ay kinakatawan bi>

kaya sa tingin ko ang aking solusyon ay kinakai>

EDIT: Ako ay hiniling na idagdag na --- tulad ng anumang git rm utos - dapat itong sundin ng gumawa upang gawing permanenteng pag-alis, halimbawa. git commit -am "Remove ignored files" .

38
29 дек. Ang sagot ay ibinigay ni JonBrave noong Disyembre 29. 2015-12-29 15:50 '16 sa 15:50 2015-12-29 15:50

Ginawa ko ito gamit ang git branch ng filter . Ang eksaktong utos na ginamit ko ay kinuha mula sa pahina ng lalaki:

BABALA : tatanggalin nito ang file mula sa buong kasaysayan.

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

Ang utos na ito ay muling nililikha ang buong kasaysayan ng git rm pamamagitan ng pagtakbo ng git rm bago gumawa ng bawat isa at sa gayon nag-aalis ng tinukoy na file. Tandaan na magsagawa ng backup bago patakbuhin ang command, dahil mawawala ito.

35
13 авг. ang sagot ay ibinigay drrlvn 13 aug. 2009-08-13 22:35 '09 at 10:35 AM 2009-08-13 22:35
  • I-update ang .gitignore file - halimbawa, magdagdag ng isang folder kung saan hindi mo nais na subaybayan ang .gitignore .

  • git rm -r --cached . - tanggalin ang lahat ng sinusubaybayan na mga file, kabi>

  • git add . - Ang lahat ng mga file ay idadagdag pabalik, maliban sa mga tinukoy sa. .gitignore .


Tip @AkiraYamamoto sumbrero upang ituro sa tamang direksyon.

18
04 апр. ang sagot ay binibigyan Chen_Wayne 04 apr. 2016-04-04 07:09 '16 sa 7:09 2016-04-04 07:09

Sa palagay ko, marahil, ang git ay hindi lubos na makalimutan ang tungkol sa file dahil sa konsepto nito ( seksyon ng "Mga Larawan, hindi ang Pagkakaiba" ).

Ang problemang ito ay nawawala, halimbawa, kapag gumagamit ng CVS. Nagbebenta ang impormasyon ng CVS bi>

Subalit sa git, sa bawat oras na gumawa o i-save ang estado ng iyong proyekto, ito ay karaniwang tumatagal ng isang larawan ng kung ano ang lahat ng iyong mga file ay mukhang sa sandaling ito at nag-iimbak ng isang link sa snapshot na ito.Kaya, kung nagdagdag ka ng isang file ng isang beses, ito ay palaging ay naroroon sa snapshot na ito.

Ang dalawang artikulong ito ay kapaki-pakinabang sa akin:

git assume-no change vs skip-worktree and How to ignore changes in tracked files using git

Batay sa mga ito, gagawin ko ang sumusunod kung nasubaybayan na ang file:

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

Mula sa puntong ito, ang lahat ng mga lokal na pagbabago sa file na ito ay hindi papansinin at hindi tatanggalin. Kung ang file ay binago sa isang remote, isang conflict ay mangyayari kapag git pull . Ang stop ay hindi gagana. Upang malutas ang problema, kopyahin ang mga nilalaman ng file sa isang ligtas na lugar at sundin ang mga hakbang na ito:

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

Ang mga nilalaman ng file ay papalitan ng tinanggal na nilalaman. Ilagay ang iyong mga pagbabago mula sa isang ligtas na lugar sa file at tumakbo muli:

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

Kung ang lahat na gumagana sa proyektong ito ay nagpapatakbo ng git update-index --skip-worktree <file> , dapat na wa>pull . Ang solusyon na ito ay angkop para sa mga file ng configuration kapag ang bawat developer ay may sariling configuration ng proyekto.

Ito ay hindi masyadong maginhawa upang gawin tuwing ang isang file ay nabago sa isang remote na computer, ngunit maaari itong protektahan ito mula sa pagiging mapapatungan ng malayuang nilalaman.

12
21 мая '17 в 18:12 2017-05-21 18:12 ang sagot ay ibinigay na Boolean_Type Mayo 21, '17 sa 6:12 2017-05-05 18:12

Kopyahin / I-paste ang Tugon: 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

Ang utos na ito ay hindi papansinin ang mga file na inilipat na sa Git repository, ngunit ngayon ay idinagdag namin ang mga ito sa. .gitignore .

5
19 нояб. Ang sagot ay ibinigay ng youhans Nobyembre 19 2018-11-19 14:21 '18 sa 2:21 ng hapon 2018-11-19 14:21

Ang sagot mula sa Matt Fear ay ang pinaka-epektibong IMHO. Ang sumusunod ay isang PowerShell na script lamang para sa mga taong, sa Windows lamang, nagtatanggal ng mga file mula sa kani>

 # 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 дек. Ang sagot ay ibinigay ni Ameer Deen 25 Disyembre. 2013-12-25 03:51 '13 sa 3:51 2013-12-25 03:51

Ilipat o kopyahin ang file sa isang ligtas na lugar upang hindi mo mawala ito. Pagkatapos ay i-rm file at gumawa. Ang file ay ipapakita kung babalik ka sa isa sa mga naunang ginawa, o sa ibang sangay kung saan hindi ito natanggal. Gayunpaman, sa lahat ng darating na hinaharap, hindi mo na makikita ang file muli. Kung ang file ay nasa git upang huwag pansinin, maaari mong ilipat ito pabalik sa folder, at hindi makikita ito ng git.

5
13 авг. Sumagot na ibinigay ni Apreche Agosto 13 2009-08-13 22:27 '09 at 10:27 pm 2009-08-13 22:27

Magsagawa ng mga sumusunod na mga hakbang na halili, ang lahat ay magiging masarap.

1. Tanggalin ang maling idinagdag na mga file mula sa direktoryo / repository . Maaari mong gamitin ang command na "rm -r" (para sa linux) o tanggalin ang mga ito sa pamamagitan ng pag-browse sa mga direktoryo.

2.add file / mga direktoryo sa gitignore file at i-save ito.

3. Ngayon tanggalin ang mga ito mula sa git cache gamit ang mga utos na ito (kung may mga i>

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

4. Ngayon gumawa at pindutin , gamitin ang mga utos na ito. Aalisin nito ang mga file na ito mula sa remote git at maging sanhi ng git upang itigil ang pagsubaybay sa mga file na iyon.

 git add . git commit -m "removed unnecessary files from git" git push origin 
3
20 сент. Ang sagot ay ibinigay ni Shamsul Arefin Sajib 20 Setyembre. 2018-09-20 13:52 '18 sa 1:52 ng hapon 2018-09-20 13:52

Ang BFG ay partikular na idinisenyo upang alisin ang mga hindi gustong data, tulad ng mga malalaking file o mga password mula sa mga repository ng Git, kaya mayroon itong simpleng flag na mag-aalis ng anumang malalaking makasaysayang mga file (hindi sa iyong kasalukuyang): "-strip-blobs-more-than"

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

Kung nais mong tukuyin ang mga file sa pamamagitan ng pangalan, maaari mo ring gawin ito:

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

Ang BFG ay 10-1000x na mas mabilis kaysa sa sangay ng Git filter, at karaniwan ay mas madaling gamitin - tingnan ang mga tagubilin para sa buong paggamit at mga halimbawa para sa higit pang mga detalye.

Pinagmulan: https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html

3
03 сент. Sagot na ibinigay ni Meir Gerenstadt Septiyembre 03. 2017-09-03 15:37 '17 sa 3:37 ng hapon 2017-09-03 15:37

Nagustuhan ko ang sagot mula kay JonBrave, ngunit mayroon akong medyo marumi na nagtatrabaho ng mga direktoryo na nag-aayos -a, ito ay natatakot sa akin ng kaunti, kaya nga kung ano ang ginawa ko:

git config - global alias.exclude-ignored '! git ls-files -z - nilagdaan --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 "bagong gitignore at tanggalin ang mga binabalewala na mga file mula sa index"

pagkasira:

 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" 
  • tanggalin ang mga hindi pinansin na mga file mula sa index
  • Stage.gitignore at ang mga file na tinanggal mo >
  • upang gumawa
2
08 авг. ang sagot ay ibinigay ni Jay Irvine 08 aug. 2018-08-08 23:49 '18 sa 11:49 PM 2018-08-08 23:49

Kung ayaw mong gamitin ang CLI at magtrabaho sa Windows, isang simpleng solusyon ay ang paggamit ng TortoiseGit , mayroon itong pagkilos na "Tanggalin (i-save ang lokal)" sa menu, na gumagana pagmultahin.

2
15 марта '18 в 14:04 2018-03-15 14:04 Ang sagot ay ibinigay ni Pedi T. Marso 15, '18 sa 2:04 ng hapon 2018-03-15 14:04

Ito ay hindi na isang problema sa pinakabagong git (v2.17.1 sa oras ng pagsulat).

Hindi pinapansin ng. .gitignore sinusubaybayan na mga file, ngunit tinanggal. Maaari mong i-verify ang iyong sarili sa pamamagitan ng pagpapatakbo ng sumusunod na script. Ang pangwakas na pagpapahayag ng git status sabihin na "wala kang ginagawa".

 # 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 Ang sagot ay ibinigay ni Lloyd noong Hunyo 13 '18 sa 7:21 ng gabi 2018-06-13 19:21

Sa kaso ng isang na nakatuon DS_Store :

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

Huwag pansinin ang mga ito:

 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 

Sa wakas, gumawa ng isang ayusin!

0
23 апр. ang sagot ay ibinigay ng user7718859 23 apr. 2018-04-23 00:14 '18 sa 0:14 2018-04-23 00:14

Sa mac:

 $ 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. Tanggalin ang DS_Store file mula sa listahan ng mga file na sinubaybayan ng git sa sangay ng foo:

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

2. Magtulungan:

 $ git commit -m "Removed .DS_Store files" 

3. Suriin na ang mga file ay hindi na sinusubaybayan.

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

4. I-click upang alisin ang mga ito mula sa console:

 $ git push 
-5
13 янв. Sumagot na ibinigay ni Raphvanns Jan 13 2017-01-13 22:53 '17 sa 10:53 2017-01-13 22:53

Iba pang mga katanungan tungkol sa mga tag o Magtanong ng isang Tanong