Neden 'rm' yerine bir dosyayı kaldırmak için 'git rm' kullanılır?


171

SVN'de, bir şeyi doğrudan dosya sisteminden kaldırmak (svn kullanmak yerine) baş ağrısı yarattı.

Bunu kullanırken bir sorun olarak bulamadım git, ama git'in kendi rmuygulaması ( git rm) olduğunu fark ettim .

Arasındaki fark nedir rmve git rm?

Yanıtlar:


253

Sadece kullanırsanız rm, takip etmeniz gerekir git add <fileRemoved>. git rmbunu tek adımda yapar.

Ayrıca git rm --cacheddosyayı dizinden kaldıracak şekilde kullanabilirsiniz (bir sonraki işlemde silinmek üzere hazırlar), ancak kopyanızı yerel dosya sisteminde saklar.


İyi cevap. git reset --hardAyrılmış kafa durumundan çıkmak için bir master ödülü kullanabilir ve sonra bir ödeme yaptım çünkü taahhüt edilmemiş herhangi bir değişiklik olmadığını biliyordum. Değişikliklerinizi yapmadıysanız bir git stash yapmak isteyebilirsiniz, ama git için nispeten yeniyim, bu yüzden kesin komutu bilmiyorum. 2014 yılında veya sonrasında buraya geldiyseniz, umarım bu cevap sizin için yararlı olmuştur.
Eric Hepperle - CodeSlayer2010

@Andy - Kullanarak rm(yerine git rm) kullandım ve kullanarak birçok dosyayı sildim ve şimdi bunları gitizlemek istemiyorum . Değişiklikleri geri almanın bir yolu var mı? İstediğim gitbenim ayak basmaya rmkullandığım vermedi beri olarak uzaklaştırıldı git rmilk etapta.
Chetan Arvind Patil

Bu açıkça dokümanlar çevrimiçi açıkça yazılmış olsaydı güzel olurdu (orada olabilir, ama açıkçası belli değil ya da bu soru sorulan olmazdı). Kullanıcıların OS rm yoluna giderlerse yanlış bir şey yapmadıklarını bilmesi güzel olurdu. Ve OS rotasına gitmek için nedenler var. Örneğin, bir şeyin değişikliği yapmadan önce çalıştığını test etmek için bir dosyayı silmeniz gerekiyorsa, OS yolu git rm'yi kullanmaktan biraz daha güvenlidir, git durumunda olduğu gibi eylemi bozmanız gerekir, OS seçeneğinde ise getirmek için (inanıyorum).
bob

12

Kullanarak dosyaları kaldırmak rmkendi başına bir sorun değildir, ancak daha sonra dosyanın kaldırıldığını taahhüt etmek istiyorsanız, git rmyine de yapmanız gerekir, bu yüzden bunu yarasadan hemen yapabilirsiniz.

Ayrıca, kabuğunuza bağlı olarak git rm, dosyayı sildikten sonra yapamazsınız, sekme tamamlama elde edemezsiniz, bu nedenle yolu kendiniz yazmanız gerekir, oysa git rmdosya devam ederken sekme tamamlama normal olarak çalışır.


7

git rmdosyayı dizinden ve çalışma dizininden kaldıracaktır (yalnızca kullandıysanız dizin --cached), böylece silme işlemi bir sonraki işlem için hazırlanır.


4

Ancak, git rm yerine rm kullanarak bitirirseniz. Git add'i atlayabilir ve aşağıdakileri kullanarak değişiklikleri doğrudan uygulayabilirsiniz:

git commit -a


3

Dosyaları dizinden veya çalışma ağacından ve dizinden kaldırın. git rm bir dosyayı yalnızca çalışma dizininizden kaldırmaz.

Bunu kullanarak bir dosyayı nasıl silip rm -fardından dizininizden kaldırabileceğiniz aşağıda açıklanmıştır:git rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Ancak bunu tek seferde yapabilirsiniz git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html

2

Git rm kullanıldığında, kaldırma işlemi bir sonraki işleminizin bir parçası olacaktır. Değişikliği zorlamak istiyorsanız git rm kullanmalısınız.


2

Andy'nin cevabına ek olarak, aşağıdakiler için ek bir yardımcı program var git rm:

  1. Güvenlik : git rmBunun yerine rmGit HEAD, bir dosyanın sürümü ile hazırlama dizini veya çalışma ağacı sürümü arasında bir tutarsızlık olması durumunda kaldırmayı engelleyecektir . Bu blok, devam eden değişikliklerin kaldırılmasını önleyen bir güvenlik mekanizmasıdır.

  2. Korunması : git rm --dry-run. Bu seçenek, git rmkomutu yürütecek ancak dosyaları gerçekten silmeyecek bir korumadır. Bunun yerine, kaldırılacak dosyaları çıkarır.

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.