• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEduKodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Kritik Dosyalarınızı Git Reponuzdan Temizleyin

  • Posted by Rahman Usta
  • Categories Genel, Uncategorized, Yazılar, Yazılım
  • Date 10 Temmuz 2014

Merhaba arkadaşlar, bugün sizlerle yanlışlıkla git geçmişinize tutunmuş kritik dosyalarınızın nasıl temizleyeceğinizden bahsetmek istiyorum.

Git versiyonlama sistemi için .gitignore dosyası çok önemli, hatta git reposu oluştururkenki ilk aşamada .gitignore dosyasını özenle hazırlamak ve gerektiğinde güncellemek fazla önem arzediyor.

Şimdi bir demo eşliğinde durumu ve çözüm adımlarını beraber işleyelim.

  1. Öncelikle bir dizin oluşturup içerisinde Git versiyonlama sistemini başlatalım.
$ mkdir demo
$ cd demo
$ git init
  1. İkinci aşamada birkaç dizin ve içerisinde herkese açık olmasını istemediğimiz password.txt dosyasını ekleyelim.
$ mkdir firstLevelDir
$ cd firstLevelDir
$ mkdir secondLevelDir
$ cd secondLevelDir
$ touch password.txt
  1. password.txt içerisinde sizin için kritik öneme sahip bir şifre bulunduğunu varsayalım. Şimdi ilk commit işlemini gerçekleştirelim.
$ cd demo
$ git add .
$ git commit -m "First commit"
  1. İlk commit işleminden sonra şimdi kritik öneme sahip olmayan bir dosya daha ekleyelim nonPassword.txt ve ikinci commit işlemini gerçekleştirelim.
$ git add .
$ git commit -m "Second commit"
  1. Sonraki aşamada nonPassword.txt içerisine yeni birşeyler ekleyelim ve bir kez daha commit işlemi gerçekleştirelim.
$ git add .
$ git commit -m "Last commit"

Son commit işleminden sonra git log işlettiğimizde aşağıdakine benzer bir sonuç alacağız.

commit 73203300643427afc0f8304d25b8912af50b6771
Author: Rahman Usta <rahmanusta@kodedu.com>
Date:   Thu Jul 10 11:40:08 2014 +0000

    Last commit

commit 8cedbe71a99194eb88c89728240c0f251f5dafa1
Author: Rahman Usta <rahmanusta@kodedu.com>
Date:   Thu Jul 10 11:38:21 2014 +0000

    Second commit

commit 70f2fd0eb2c1a0713917fc4ef2e85ec8b7fe0efb
Author: Rahman Usta <rahmanusta@kodedu.com>
Date:   Thu Jul 10 11:35:44 2014 +0000

    First commit

Şimdi bin eyvah etme vakti geldi 🙂 Malesef şifrenizi içeren bir dosyayı git geçmişinizde tutmuş oldunuz. Peki henüz herşey geç olmadan bu dosyayı nasıl temizleyeceksiniz?

İlk akla gelen şu olabilir, “password.txt dosyanın silinmesi ve yeni bir commit işleminin daha yapılması”.

Fakat bu biçimde sadece 4. ve sonraki revizyonlarda password.txt dosyasını geçmişinizde tutmamış olacaksınız, ilk üç revizyonda ise dosyanız hala bulunuyor olacak. Yani git geçmişine bakan herhangi biri bu dosyaya erişebiliyor olacak.

Peki çözüm nedir?

Çözüm için git filter-branch komutu ve BFG Repo-Cleaner aracı kullanılabilir.

Çözüm 1 : (git filter-branch)

$ cd demo
$ git filter-branch --force --index-filter "git rm --cached --ignore-unmatch firstLevelDir/secondLevelDir/password.txt" --prune-empty --tag-name-filter cat -- --all

Bu haliyle firstLevelDir/secondLevelDir/password.txt dosyasını Git geçmişinizden silip süpürmüş olacaksınız. Bu komut bütününü işlettiğinizde aşağıdaki gibi bir çıktı göreceksiniz.

Rewrite 70f2fd0eb2c1a0713917fc4ef2e85ec8b7fe0efb (1/3)rm 'firstLevelDir/secondLevelDir/password.txt'
Rewrite 8cedbe71a99194eb88c89728240c0f251f5dafa1 (2/3)rm 'firstLevelDir/secondLevelDir/password.txt'
Rewrite 73203300643427afc0f8304d25b8912af50b6771 (3/3)rm 'firstLevelDir/secondLevelDir/password.txt'

Ref 'refs/heads/master' was rewritten

Görüldüğü üzere 3 revizyonda da password.txt silinmiş oldu.

Şimdi sunucunuzdaki geçmişi lokal geçmişiniz ile güncellemelisiniz.

git push origin master --force

Çözüm 2 : (BFG Repo-Cleaner)

BFG Repo-Cleaner Java ile yazılmış bir araçtır. BFG ile kolay bir biçimde Git geçmişinizde olmasını istemediğiniz dosyaları temizleyebilirsiniz.http://rtyley.github.io/bfg-repo-cleaner/ bağlantısından bfg.jar indirerek BFG’yi kullanmaya başlayabilirsiniz.

$ cd demo
$ java -jar bfg.jar --delete-files password.txt

Bu iki yöntemle de password.txt dosyasını Git geçmişinden temizlemiş oluyoruz.

Referanslar

[1] https://help.github.com/articles/remove-sensitive-data

[2] http://rtyley.github.io/bfg-repo-cleaner/

Tekrar görüşmek dileğiyle.

  • Share:
author avatar
Rahman Usta
Kodedu.com bünyesinde eğitim ve danışmanlık faaliyetleri sürdüren Rahman Usta, 2012 yılında yayına çıkan popülerJava Mimarisiyle Kurumsal Çözümler ve 2014 yılında yayınlanan Java 8 Ebook kitaplarının yazarıdır. Açık kaynak dünyasına katkı veren yazar, geliştirdiği AsciidocFX projesiyle Duke's Choice Award 2015 ödülünü kazanmıştır. Rahman ayrıca, Istanbul JUG'un ve Java standartlarını geliştiren JCP (Java Community Process)'in bir üyesidir. 2018 yılında Java Şampiyonu olarak seçilmiştir.

Previous post

Java 8 - Consumer Arayüzü
10 Temmuz 2014

Next post

Maven Plugin Nasıl Geliştirilir?
18 Temmuz 2014

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Dekoratör Tasarım Kalıbı
15May2012
Java 8 – Lambda Expression nedir? Nasıl kullanırım?
20Mar2014
Sürekli Entegrasyon Yaklaşımları – (ücretsiz webiner)
16Tem2012
Java API for JSON Processing – Creating JSON Objects
15Haz2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • YAML Nedir? Neden YAML Kullanmalıyız? için shahriyar
  • Java Persistence API Nedir? (Giriş) için Utku
  • Java 8 – CompletableFuture ile Asenkron Programlama için Rahman Usta
  • Java 8 – CompletableFuture ile Asenkron Programlama için burak
  • Arm7 Nxp 2104 işlemci ile basit bir Uygulama için Mustafa Dinc

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.