Dosya Silmek, Dosya Adını Değiştirmek
git mv
Linus Torvalds, Linux’daki dosya operasyonlarının pek çoğunu GIT’e entegre etmiş. Nasıl ki Unix/Linux’da bir dosyanın adını değiştirmek için;
$ mv dosya dosya_yeni_isim
kullanılıyorsa, aynı işi;
$ git mv dosya dosya_yeni_isim
şeklinde yapmak mümkün. Eğer adını ya da yerini değiştireceğimiz dosya revizyon kontrolü altında değilse GIT size uyarı verir:
$ git mv file1 file_new_1
fatal: not under version control, source=file1, destination=file_new_1
Dosya track ediliyor, unuttunuz ve mv
işlemini GIT üzerinden değil de,
işletim sistemi üzerinden yaptınız.
$ mv app.js application.js
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: app.js
Untracked files:
(use "git add <file>..." to include in what will be committed)
application.js
no changes added to commit (use "git add" and/or "git commit -a")
GIT, app.js
dosyasının silindiğini ve application.js
dosyasının takip
altında olmayan yepyeni bir dosya olduğunu düşündü. Hatta artık app.js
dosyasını takipten çıkarmamız için bize;
$ git status
:
(use "git add/rm <file>..." to update what will be committed)
:
bile dedi... Şimdi biz bu değişikliği kayıt altına alalım, yani stage edelim:
$ git add .
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: app.js -> application.js
Ve GIT app.js
dosyasını silmediğimizi sadece adını değiştirdiğimizi anladı.
$ git status
:
renamed: app.js -> application.js
:
GIT, default olarak Similarity Index diye bir değere bakar. Eğer bu karşılaştırma minimum 0.5 olması durumunda GIT bu iki dosyanın aynı olduğuna karar verir.
GIT için önemli olan dosya adı değildir, dosyanın içeriğidir.
git rm
Aynı mv
gibi, işletim sisteminin bir kopya operasyonu da buradadır. Normalde
dosya silmek için;
$ rm file
$ rm -r folder/
yaparız. Aynı mantıkta önüne bir tek git
takıyoruz:
$ git rm file
$ git rm -r folder
Eğer silme işini GIT üzerinden yapmazsak;
$ rm index-test.html
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: index-test.html
no changes added to commit (use "git add" and/or "git commit -a")
Silinme durumunu GIT anladı ama staging’e atmadı. Bu işlemi bizim yapmamızı
istiyor. Eğer bunu git rm
ile yapsaydık;
$ git rm index-test.html
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: index-test.html
otomatik olarak staging’e alındı. Tek yapmamız gereken şey commit etmek.
Silme ya da isim değiştirme işlerini kullandığınız IDE yerine mutlaka komut satırından yapmanız sizin için daha kolay GIT kullanımı pratiği yapmanızı sağlar.