Git deposundan birleştirme işleminden sonra .orig dosyaları nasıl silinir?


160

Birleştirme sırasında git depomda .orig dosyaları artık nasıl değiştirilmiş ve izlenmemiş sektörde görüntüleniyor. Ama artık bu dosyaları havuzumda istemiyorum. Bu nasıl yapılır.

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

Herhangi bir yardım takdir edilecektir.



@ziu, depomda zaten mevcut olan, git merge veya başka bir geliştirici tarafından teslim edilen dosyaları kaldırmak istiyorum
maximus ツ

1
Teslim edilen dosyalar hakkındaki bölümü kaçırdım. Ancak, .orig dosyaları birleştirme aracıyla yazılır. Bana temiz olmayan bir çatışma çözümü olarak geliyor.
ziu

Dosyayı tüm geçmişten tamamen kaldırmanız mı gerekiyor?
linquize

Yanıtlar:


253

Bu durumda en iyi çözüm, basit tutmak ve git'ten bağımsız olarak bu dosyalardan kurtulmaktır:

cd /your/repo/directory
find . -name '*.orig' -delete 

Alternatif olarak, Windows / PowerShell'de aşağıdaki komutu çalıştırabilirsiniz

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item

14
Bir kesin hata alırsanız kullanın: find. -adı '* .orig' | xargs rm -f
Neil

Bir uyarı olarak, 'find -delete' kullanmak tehlikeli olabilir. Lütfen yalnızca silmek istediğinizi sildiğinizden emin olmak için dizinin (bu durumda '.') Doğru olup olmadığını kontrol edin
kingledion

8
Bunu git clean -dfyapmayan bir acı . Neden geride bıraktığı çöpleri el ile temizlemeliyiz?
Sridhar Sarnobat

Peki ya Windows?
Panzercrisis

3
@Panzercrisis Windows kullanıyorsanız muhtemelen Git ile arayüz oluşturduğunuz bir terminal emülatörüne sahip olacaksınız. Ben sık kullanılan diğer tüm araçları ile BASH içeren "gitforwindows" tavsiye ederim.
TheChymera

151

Burada veya buradagit clean bulabileceğiniz daha fazla bilgiyi deneyin


1
İzlenmemiş dosyaları temizleyebilirim, ama zaten depoda olan bu tür dosyaları kaldırmaya ne dersiniz.
maximus ツ

önce dosyayı depodan kaldırmanız git rm <filename>ve ardından commit.a sonra bu * .orig dosyasını git ignore'a eklemeniz gerekir.
Amar

4
Bence bu cevap olarak işaretlenmiş olandan daha iyi bir çözüm.
Mart'ta Orgmir

51
git clean -igerçekten güzel. size silinecek dosyaların bir listesini verir ve listeyle nasıl başa çıkılacağına dair seçenekler sunar (listeye filtre uygula, listedeki her şeyi silebilmek ve diğer bazı seçenekler).
PPPaul

1
Git * dosyasını yalnızca * .orig dosyalarını silmeye yardımcı olması için desenlerle birlikte kullanabilirsiniz: git clean -f -e '*.*' -e '!*.orig' Yalnızca bir dışlama düzeni vardır, ancak negatif desenler için biraz destek vardır. Böylece tüm dosyaları hariç tutabiliriz *.*ve daha sonra yalnızca *.origdosyaların hariç tutulmasını reddedebiliriz .
leorleor


6

.Gitignore kullanarak dosyaları yok sayabilirsiniz

Burada gösterildiği gibi listeye * .orig koymanız yeterlidir

https://help.github.com/articles/ignoring-files

mevcut dosyaları silmek için kabuk betiği oluşturabilir ve aşağıdaki gibi proje klasöründen çalıştırabilirsiniz

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done

5
Kesinlikle bunu yapabilmesine rağmen, burada yapılacak doğru şey bu değil :)
Sergio Tulentsev

1
Yedeklemeyi koruduğunu ancak aşamalı dosyaları engellemediğinden iyi bir fikir olduğunu düşünüyorum
akazemis

@akazemis - öyle düşünürdünüz, ancak kod için çığlık attığınızda, istediğiniz kadar iki arama sonucu görürsünüz (bu size en son kodunuzda ne olduğuna dair yanlış bir algı verir). O kadar nadirdir ki, orig dosyalarına sahip olmama tehlikesiyle yaşamayı tercih ederim. Sadece düzenli olarak çalışmak daha iyidir.
Sridhar Sarnobat

5

Ne yazık ki git cleanbenim için çalışmıyor çünkü *.origglobal gitignore dosyama ekledim, bu yüzden de temiz değil. Yoksayılan tüm dosyalarımın silinmesini git clean -xistemediğim için bile çalışma iyi değil . faydalıdır, ancak gerçekten her dosyayı incelemek istemiyorum.git clean -i

Ancak, bir hariç tutma düzeni kullanabilir ve eşleşmeyi reddedebiliriz. Bu komutla önizleme:

git clean -e '!*.orig' --dry-run

Ardından, kendinizden emin olduğunuzda, forceonları gerçekten silmek için bayrağı iletin:

git clean -e '!*.orig' -f

Leorleor'un yorumuna dayanarak


3

git rm Gemfile.lock.orig ve ihtiyacınız olmayan dosyaların geri kalanı. git commit --amend

Bu lekeleri tamamen çıkarmak için, git gc --prune=0 --aggressive


@linquizebut git rm Gemfile.lock.orig taahhüdünde değişiklik yaparak son işlem yapılacaktır, değil mi? böyle bir dosya için herhangi bir taahhüt olmamak için başka bir yolu var mı?
maximus ツ

2

Benim için git clean -ftüm * .oig dosyaları kaldırıldı. Ve daha önce orada olanları saklıyor.

Birleşmeden sonra (neredeyse) böyle görünüyordu:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/birleştirme işleminden önce izlenmemiş bir dosya olarak zaten vardı. .idea/misc.xml.orig(ve çok daha fazlası) kaldırılmak zorunda kaldı.

=> Kullanarak git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

sonuçlandı:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/

0

basitçe yapabilirsin git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s dizine göre değiştirilmiş / eksik tüm dosyaları almanızı sağlar

grep "\.orig$" ".orig" ile biten dosyaları koruyarak filtreleme

awk '{print $2}' dosya adını listeler (git bilgisini atlamak, örneğin A, M, ??)

xargs -n1 -r echo rm baskılar her argümandaki kaldırma komutlarını (-n1: birer birer ve -r: boş olduğunda atla) kaldırılacak dosyaları çift kontrol ederek komutları kopyalayıp yapıştırmanız yeterlidir.


Bu, yazarların sorusunu cevaplasa da, açıklayıcı kelimeler ve / veya belgelere bağlantılar içermez. Ham kod parçacıkları, çevrelerindeki bazı ifadeler olmadan çok yararlı değildir. Ayrıca bulabilirsiniz iyi bir cevap yazmayı çok yararlı. Lütfen cevabınızı düzenleyin.
hellow

-4

git rm <file>

http://git-scm.com/docs/git-rm

Ayrıca, yoksaymak istediğiniz dosyaları .gitignore dosyanıza ekleyin.


git rm <file> <file>Sadece onları listele.
veritas1

Sonra tüm dosyaları listelemeniz veya onları git rm'ye iletmek için find gibi bir araç kullanmanız veya bir kabuk glob ve bunların üzerinde döngü kullanmanız gerekir. Git bu standart Unix komut satırı işlevini çoğaltmaz.
mabraham

1
orig dosyaların depoya eklenmez, bu yüzden kullanımı gerek yoktur git rm, sadece kullanmak, rmbunun yerine
Edson Medina
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.