{"id":35690,"date":"2025-12-02T19:41:03","date_gmt":"2025-12-02T16:41:03","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35690"},"modified":"2025-12-02T19:41:03","modified_gmt":"2025-12-02T16:41:03","slug":"git-deponuzu-digitalocean-spacese-yedekleme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/","title":{"rendered":"Git Deponuzu DigitalOcean Spaces&#8217;e Yedekleme Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Git Deponuzu DigitalOcean Spaces&#8217;e Yedekleme Rehberi<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin kalbinde yer alan Git, projelerinizi versiyonlamak, de\u011fi\u015fiklikleri takip etmek ve ekip i\u00e7inde i\u015fbirli\u011fi yapmak i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Ancak, Git depolar\u0131n\u0131z\u0131 sadece yerel makinenizde veya tek bir uzak sunucuda tutmak, potansiyel veri kayb\u0131 risklerini beraberinde getirir. Donan\u0131m ar\u0131zalar\u0131, yanl\u0131\u015fl\u0131kla silmeler, k\u00f6t\u00fc ama\u00e7l\u0131 yaz\u0131l\u0131mlar veya do\u011fal afetler gibi \u00f6ng\u00f6r\u00fclemeyen olaylar, de\u011ferli kod taban\u0131n\u0131z\u0131n tamamen yok olmas\u0131na neden olabilir. Bu nedenle, Git depolar\u0131n\u0131z\u0131n d\u00fczenli ve g\u00fcvenli bir \u015fekilde yedeklenmesi, her geli\u015ftirici ve ekip i\u00e7in hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<p>Bu makale, Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces&#8217;e nas\u0131l yedekleyece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. DigitalOcean Spaces, Amazon S3 ile uyumlu, \u00f6l\u00e7eklenebilir ve uygun maliyetli bir nesne depolama hizmetidir. Projelerinizi g\u00fcvenli bir \u015fekilde bulutta depolayarak, olas\u0131 veri kay\u0131plar\u0131na kar\u015f\u0131 kendinizi koruyabilir ve felaket kurtarma senaryolar\u0131na haz\u0131rl\u0131kl\u0131 olabilirsiniz. Makalenin ilerleyen b\u00f6l\u00fcmlerinde, DigitalOcean Spaces&#8217;in avantajlar\u0131ndan, farkl\u0131 yedekleme stratejilerinden, AWS CLI kullanarak yedekleme ad\u0131mlar\u0131ndan, otomatik yedekleme betiklerinden ve en iyi g\u00fcvenlik uygulamalar\u0131ndan detayl\u0131ca bahsedece\u011fiz. Amac\u0131m\u0131z, size kapsaml\u0131 bir rehber sunarak Git depolar\u0131n\u0131z\u0131n yedeklenmesi s\u00fcrecini sorunsuz ve g\u00fcvenilir hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.<\/p>\n<h3>Neden Git Depolar\u0131n\u0131z\u0131 Yedeklemelisiniz?<\/h3>\n<p>Git depolar\u0131n\u0131z\u0131 yedeklemek, geli\u015ftirme s\u00fcrecinizin devaml\u0131l\u0131\u011f\u0131 ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fc i\u00e7in kritik bir ad\u0131md\u0131r. Bir\u00e7ok geli\u015ftirici, uzak bir Git sunucusu (GitHub, GitLab, Bitbucket gibi) kulland\u0131\u011f\u0131 i\u00e7in yedekleme konusunda kendilerini g\u00fcvende hissedebilir. Ancak bu platformlar bile tamamen risksiz de\u011fildir ve ek bir yedekleme katman\u0131 her zaman tavsiye edilir. \u0130\u015fte Git depolar\u0131n\u0131z\u0131 yedeklemeniz i\u00e7in ba\u015fl\u0131ca nedenler:<\/p>\n<h4>Veri Kayb\u0131 Riskleri<\/h4>\n<p>*   <strong>Donan\u0131m Ar\u0131zalar\u0131:<\/strong> Yerel makinenizin sabit diski bozulabilir veya sunucunuzda bir donan\u0131m ar\u0131zas\u0131 meydana gelebilir. Bu t\u00fcr durumlarda, yedeklenmemi\u015f t\u00fcm verileriniz kal\u0131c\u0131 olarak kaybolabilir.<br \/>\n*   <strong>Yanl\u0131\u015fl\u0131kla Silme:<\/strong> \u0130nsan hatas\u0131 ka\u00e7\u0131n\u0131lmazd\u0131r. Yanl\u0131\u015f bir <code>rm -rf<\/code> komutu veya Git ge\u00e7mi\u015fini silen hatal\u0131 bir i\u015flem, projenizin \u00f6nemli b\u00f6l\u00fcmlerini veya t\u00fcm\u00fcn\u00fc yok edebilir.<br \/>\n*   <strong>Yaz\u0131l\u0131m Hatalar\u0131 ve Bozulmalar:<\/strong> \u0130\u015fletim sistemi veya Git istemcisindeki bir hata, deponuzun bozulmas\u0131na ve eri\u015filemez hale gelmesine neden olabilir.<br \/>\n*   <strong>K\u00f6t\u00fc Ama\u00e7l\u0131 Yaz\u0131l\u0131mlar ve Siber Sald\u0131r\u0131lar:<\/strong> Fidye yaz\u0131l\u0131mlar\u0131 veya di\u011fer siber sald\u0131r\u0131lar, verilerinizi \u015fifreleyebilir veya silebilir. Yedekleriniz, bu t\u00fcr durumlarda h\u0131zl\u0131 bir \u015fekilde kurtarma yapman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Tarihsel Verilerin Korunmas\u0131<\/h4>\n<p>Git, projenizin t\u00fcm tarih\u00e7esini, her bir de\u011fi\u015fikli\u011fi ve kimin taraf\u0131ndan yap\u0131ld\u0131\u011f\u0131n\u0131 kaydeder. Bu tarihsel veriler, hata ay\u0131klama, kod incelemesi ve projenin evrimini anlama a\u00e7\u0131s\u0131ndan paha bi\u00e7ilmezdir. Yedekleme, bu de\u011ferli tarih\u00e7enin kaybolmamas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Felaket Kurtarma<\/h4>\n<p>Beklenmedik bir felaket (yang\u0131n, sel, deprem vb.) durumunda, fiziksel sunucular\u0131n\u0131z veya yerel geli\u015ftirme ortamlar\u0131n\u0131z tamamen kullan\u0131lamaz hale gelebilir. Bulut tabanl\u0131 bir yedekleme \u00e7\u00f6z\u00fcm\u00fc, bu t\u00fcr senaryolarda i\u015f s\u00fcreklili\u011fini garanti alt\u0131na alman\u0131n en etkili yoludur.<\/p>\n<h4>Ekip \u00c7al\u0131\u015fmas\u0131 ve Senkronizasyonun \u00d6tesinde G\u00fcvenlik<\/h4>\n<p>Uzak bir Git deposu kullanmak, ekip \u00fcyeleri aras\u0131nda kodun senkronize edilmesini sa\u011flar. Ancak bu, birincil depolama konumunun (\u00f6rne\u011fin GitHub) kendisinin bir yedek oldu\u011fu anlam\u0131na gelmez. Kendi yedeklerinizi tutmak, d\u0131\u015f hizmet sa\u011flay\u0131c\u0131lardan ba\u011f\u0131ms\u0131z bir g\u00fcvenlik katman\u0131 olu\u015fturur.<\/p>\n<p>\u00d6zetle, Git depolar\u0131n\u0131z\u0131 yedeklemek, sadece bir &#8220;iyi uygulama&#8221; de\u011fil, ayn\u0131 zamanda i\u015f s\u00fcreklili\u011fi ve veri g\u00fcvenli\u011fi i\u00e7in mutlak bir gerekliliktir.<\/p>\n<h3>DigitalOcean Spaces Nedir ve Neden Tercih Edilmeli?<\/h3>\n<p>DigitalOcean Spaces, geli\u015ftiriciler ve \u015firketler i\u00e7in tasarlanm\u0131\u015f, uygun maliyetli ve \u00f6l\u00e7eklenebilir bir nesne depolama hizmetidir. Amazon S3 (Simple Storage Service) API&#8217;si ile uyumlu olmas\u0131 sayesinde, S3 ile \u00e7al\u0131\u015fan bir\u00e7ok ara\u00e7 ve k\u00fct\u00fcphane Spaces ile de sorunsuz bir \u015fekilde kullan\u0131labilir. Bu uyumluluk, DigitalOcean Spaces&#8217;i Git depolar\u0131n\u0131z\u0131 yedeklemek i\u00e7in cazip bir se\u00e7enek haline getirir.<\/p>\n<h4>DigitalOcean Spaces&#8217;in Temel \u00d6zellikleri ve Avantajlar\u0131<\/h4>\n<p>*   <strong>S3 Uyumlu API:<\/strong> En \u00f6nemli avantajlar\u0131ndan biridir. AWS CLI, s3cmd gibi pop\u00fcler ara\u00e7lar ve bir\u00e7ok programlama dilindeki S3 k\u00fct\u00fcphaneleri DigitalOcean Spaces ile do\u011frudan \u00e7al\u0131\u015fabilir. Bu, mevcut S3 bilgi ve becerilerinizi Spaces&#8217;te de kullanabilece\u011finiz anlam\u0131na gelir.<br \/>\n*   <strong>Maliyet Etkinli\u011fi:<\/strong> Di\u011fer bulut depolama sa\u011flay\u0131c\u0131lar\u0131na k\u0131yasla genellikle daha rekabet\u00e7i fiyatland\u0131rma sunar. Hem depolama alan\u0131 hem de veri transferi (bant geni\u015fli\u011fi) i\u00e7in \u015feffaf ve \u00f6ng\u00f6r\u00fclebilir fiyatland\u0131rma modelleri bulunur.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik ve G\u00fcvenilirlik:<\/strong> \u0130htiya\u00e7lar\u0131n\u0131z do\u011frultusunda depolama alan\u0131n\u0131z\u0131 kolayca art\u0131rabilir veya azaltabilirsiniz. DigitalOcean&#8217;\u0131n altyap\u0131s\u0131, y\u00fcksek eri\u015filebilirlik ve veri dayan\u0131kl\u0131l\u0131\u011f\u0131 sa\u011flayacak \u015fekilde tasarlanm\u0131\u015ft\u0131r. Verileriniz, birden fazla fiziksel cihazda yedekli olarak saklan\u0131r.<br \/>\n*   <strong>Global Eri\u015filebilirlik:<\/strong> Farkl\u0131 co\u011frafi b\u00f6lgelerde (datacenter&#8217;lar) Spaces olu\u015fturabilirsiniz. Bu, verilerinizi kullan\u0131c\u0131lar\u0131n\u0131za veya sunucular\u0131n\u0131za daha yak\u0131n bir yerde depolayarak gecikmeyi azaltman\u0131za ve felaket kurtarma stratejilerinizi geli\u015ftirmenize olanak tan\u0131r.<br \/>\n*   <strong>Basit Kullan\u0131m Aray\u00fcz\u00fc ve Entegrasyon Kolayl\u0131\u011f\u0131:<\/strong> DigitalOcean&#8217;\u0131n kontrol paneli kullan\u0131c\u0131 dostudur. Spaces olu\u015fturmak, y\u00f6netmek ve API anahtarlar\u0131n\u0131 ayarlamak olduk\u00e7a basittir. Ayr\u0131ca, Spaces&#8217;i di\u011fer DigitalOcean hizmetleriyle (Droplets, Kubernetes vb.) kolayca entegre edebilirsiniz.<br \/>\n*   <strong>G\u00fcvenlik \u00d6zellikleri:<\/strong><br \/>\n    *   <strong>Eri\u015fim Kontrol\u00fc:<\/strong> Eri\u015fim anahtarlar\u0131 (Access Keys) ve gizli anahtarlar (Secret Keys) arac\u0131l\u0131\u011f\u0131yla Spaces&#8217;inize kimlerin eri\u015febilece\u011fini kontrol edersiniz.<br \/>\n    *   <strong>ACL&#8217;ler (Access Control Lists):<\/strong> Nesne d\u00fczeyinde veya Space d\u00fczeyinde eri\u015fim izinlerini belirleyebilirsiniz.<br \/>\n    *   <strong>Statik Web Sitesi Bar\u0131nd\u0131rma:<\/strong> Yedekleme i\u00e7in do\u011frudan ilgili olmasa da, Spaces&#8217;in statik web sitelerini bar\u0131nd\u0131rma yetene\u011fi, platformun \u00e7ok y\u00f6nl\u00fcl\u00fc\u011f\u00fcn\u00fc g\u00f6sterir.<br \/>\n    *   <strong>CORS Deste\u011fi:<\/strong> \u00c7apraz kaynak iste\u011fi (CORS) yap\u0131land\u0131rmalar\u0131 ile web uygulamalar\u0131n\u0131zdan Spaces&#8217;teki verilere g\u00fcvenli eri\u015fim sa\u011flayabilirsiniz.<\/p>\n<p>DigitalOcean Spaces, \u00f6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projelerden kurumsal d\u00fczeydeki uygulamalara kadar geni\u015f bir yelpazedeki yedekleme ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131layabilecek g\u00fc\u00e7l\u00fc ve uygun maliyetli bir \u00e7\u00f6z\u00fcmd\u00fcr. S3 uyumlulu\u011fu sayesinde, mevcut ara\u00e7 setinizi kullanarak kolayca entegre edilebilir ve y\u00f6netilebilir.<\/p>\n<h3>Yedekleme Stratejileri ve Y\u00f6ntemleri<\/h3>\n<p>Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces&#8217;e yedeklerken uygulayabilece\u011finiz birka\u00e7 farkl\u0131 strateji ve y\u00f6ntem bulunmaktad\u0131r. Her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve kullan\u0131m senaryolar\u0131 vard\u0131r.<\/p>\n<h4>Tam Yedekleme (Bare Repository)<\/h4>\n<p>Bu, bir Git deposunun \u00e7al\u0131\u015fma a\u011fac\u0131 (working directory) olmadan, sadece Git nesnelerini ve referanslar\u0131n\u0131 i\u00e7eren bir kopyas\u0131n\u0131 olu\u015fturma y\u00f6ntemidir. Bir <code>bare<\/code> depo, \u00fczerine do\u011frudan <code>git commit<\/code> veya <code>git checkout<\/code> gibi i\u015flemler yapamayaca\u011f\u0131n\u0131z, ancak <code>git push<\/code> veya <code>git fetch<\/code> gibi i\u015flemler i\u00e7in uzak bir depo olarak kullan\u0131labilen bir yap\u0131d\u0131r.<\/p>\n<p>*   <strong>Nas\u0131l Olu\u015fturulur:<\/strong> Mevcut bir Git deposunun tam yede\u011fini almak i\u00e7in <code>git clone --bare<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">git clone --bare \/path\/to\/your\/repo \/path\/to\/backup\/repo.git<\/code><\/pre>\n<p>    Bu komut, <code>\/path\/to\/your\/repo<\/code> adresindeki deponun t\u00fcm ge\u00e7mi\u015fini ve referanslar\u0131n\u0131 i\u00e7eren bir <code>bare<\/code> depo kopyas\u0131n\u0131 <code>\/path\/to\/backup\/repo.git<\/code> adresine olu\u015fturur. <code>.git<\/code> uzant\u0131s\u0131, bir <code>bare<\/code> depo oldu\u011funu belirtmek i\u00e7in yayg\u0131n bir pratiktir.<br \/>\n*   <strong>Avantajlar\u0131:<\/strong><br \/>\n    *   Deponun t\u00fcm ge\u00e7mi\u015fini ve t\u00fcm dallar\u0131 (branches) i\u00e7erir.<br \/>\n    *   Basit ve anla\u015f\u0131l\u0131r bir yedekleme y\u00f6ntemidir.<br \/>\n    *   Geri y\u00fcklemesi kolayd\u0131r; do\u011frudan bu <code>bare<\/code> depodan <code>git clone<\/code> yapabilirsiniz.<br \/>\n*   <strong>Dezavantajlar\u0131:<\/strong><br \/>\n    *   Her yedeklemede deponun tamam\u0131n\u0131 kopyalad\u0131\u011f\u0131 i\u00e7in b\u00fcy\u00fck depolar i\u00e7in zaman ve disk alan\u0131 a\u00e7\u0131s\u0131ndan verimsiz olabilir.<\/p>\n<h4>Art\u0131ml\u0131 Yedekleme (Incremental Backup)<\/h4>\n<p>Art\u0131ml\u0131 yedekleme, sadece son yedeklemeden bu yana de\u011fi\u015fen veya eklenen verileri yedeklemeyi i\u00e7erir. Bu y\u00f6ntem, \u00f6zellikle b\u00fcy\u00fck depolar i\u00e7in bant geni\u015fli\u011finden ve depolama alan\u0131ndan tasarruf sa\u011flar. Git i\u00e7in art\u0131ml\u0131 yedekleme genellikle <code>git bundle<\/code> komutu ile yap\u0131l\u0131r.<\/p>\n<p>*   <strong><code>git bundle<\/code> Nedir?<\/strong> <code>git bundle<\/code>, bir Git deposunu tek bir dosya halinde paketlemenizi sa\u011flar. Bu dosya, bir Git deposu gibi davranabilir; ondan <code>clone<\/code> yapabilir veya ona <code>fetch<\/code> edebilirsiniz. \u00d6zellikle a\u011f ba\u011flant\u0131s\u0131n\u0131n olmad\u0131\u011f\u0131 ortamlarda veya depolar\u0131 ta\u015f\u0131mak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n*   <strong>Nas\u0131l Olu\u015fturulur:<\/strong><br \/>\n    *   <strong>Tam Bundle (\u0130lk Yedekleme):<\/strong> Deponun t\u00fcm ge\u00e7mi\u015fini i\u00e7eren bir bundle olu\u015fturmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">git bundle create myrepo-full-backup.bundle --all<\/code><\/pre>\n<p>    *   <strong>Art\u0131ml\u0131 Bundle:<\/strong> Son yedeklemeden bu yana yap\u0131lan de\u011fi\u015fiklikleri i\u00e7eren bir bundle olu\u015fturmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">git bundle create myrepo-incremental-backup-$(date +%Y%m%d).bundle <son_bundle_dosyasi_ismi>..HEAD<\/code><\/pre>\n<p>        Bu komut, <code>son_bundle_dosyasi_ismi<\/code> ile belirtilen bundle&#8217;dan bu yana <code>HEAD<\/code>&#8216;deki t\u00fcm de\u011fi\u015fiklikleri yeni bir bundle dosyas\u0131na paketler.<br \/>\n*   <strong>Avantajlar\u0131:<\/strong><br \/>\n    *   Sadece de\u011fi\u015fen k\u0131s\u0131mlar yedeklendi\u011fi i\u00e7in daha k\u00fc\u00e7\u00fck dosya boyutlar\u0131 ve daha h\u0131zl\u0131 yedekleme s\u00fcreleri.<br \/>\n    *   Bant geni\u015fli\u011fi ve depolama alan\u0131 tasarrufu.<br \/>\n*   <strong>Dezavantajlar\u0131:<\/strong><br \/>\n    *   Geri y\u00fckleme s\u00fcreci, birden fazla bundle dosyas\u0131n\u0131 y\u00f6netmeyi gerektirebilir.<br \/>\n    *   \u0130lk tam bundle dosyas\u0131n\u0131n varl\u0131\u011f\u0131 \u00f6nemlidir.<\/p>\n<h4>Otomatik Yedekleme<\/h4>\n<p>Manuel yedeklemeler unutulabilir veya d\u00fczenli olarak yap\u0131lmayabilir. Bu nedenle, yedekleme s\u00fcrecini otomatikle\u015ftirmek en iyi yakla\u015f\u0131md\u0131r.<\/p>\n<p>*   <strong>Betikler (Scriptler):<\/strong> Yedekleme ad\u0131mlar\u0131n\u0131 i\u00e7eren bir Bash veya PowerShell beti\u011fi olu\u015fturmak, s\u00fcreci otomatikle\u015ftirmenin temelidir. Bu betikler, <code>git clone --bare<\/code>, <code>git bundle<\/code>, <code>aws s3 sync<\/code> veya <code>aws s3 cp<\/code> gibi komutlar\u0131 i\u00e7erecektir.<br \/>\n*   <strong>Cron \u0130\u015fleri:<\/strong> Linux\/Unix sistemlerinde <code>cron<\/code> veya Windows&#8217;ta G\u00f6rev Zamanlay\u0131c\u0131 (Task Scheduler) kullanarak, yedekleme betiklerinizi belirli aral\u0131klarla (g\u00fcnl\u00fck, haftal\u0131k vb.) otomatik olarak \u00e7al\u0131\u015ft\u0131rmak m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>En iyi strateji, genellikle tam yedeklemeleri (bare repository veya tam bundle) d\u00fczenli aral\u0131klarla (\u00f6rne\u011fin haftal\u0131k) yapmak ve aradaki g\u00fcnlerde art\u0131ml\u0131 yedeklemeler (incremental bundle) yapmakt\u0131r. Bu, hem veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flar hem de yedekleme s\u00fcre\u00e7lerini verimli tutar.<\/p>\n<h3>DigitalOcean Spaces&#8217;i Haz\u0131rlama<\/h3>\n<p>Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces&#8217;e yedeklemeye ba\u015flamadan \u00f6nce, Spaces hesab\u0131n\u0131z\u0131 ve gerekli kimlik do\u011frulama bilgilerini haz\u0131rlaman\u0131z gerekir.<\/p>\n<h4>1. DigitalOcean Spaces Olu\u015fturma<\/h4>\n<p>*   <strong>DigitalOcean Kontrol Paneli&#8217;ne Giri\u015f Yap\u0131n:<\/strong> Taray\u0131c\u0131n\u0131zdan DigitalOcean hesab\u0131n\u0131za giri\u015f yap\u0131n.<br \/>\n*   <strong>&#8220;Spaces&#8221; B\u00f6l\u00fcm\u00fcne Gidin:<\/strong> Sol men\u00fcden &#8220;Spaces&#8221; se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n*   <strong>&#8220;Create a Space&#8221; Butonuna T\u0131klay\u0131n:<\/strong> Yeni bir Space olu\u015fturmak i\u00e7in bu butonu kullan\u0131n.<br \/>\n*   <strong>B\u00f6lge Se\u00e7imi:<\/strong> Verilerinizin depolanaca\u011f\u0131 co\u011frafi b\u00f6lgeyi se\u00e7in. Sunucular\u0131n\u0131za veya kendinize en yak\u0131n b\u00f6lgeyi se\u00e7mek, gecikmeyi azaltabilir. \u00d6rne\u011fin, &#8220;Frankfurt&#8221;, &#8220;London&#8221; veya &#8220;New York&#8221;.<br \/>\n*   <strong>Space Ad\u0131 Belirleyin:<\/strong> Space&#8217;inize benzersiz bir isim verin. Bu isim, Spaces URL&#8217;nizin bir par\u00e7as\u0131 olacakt\u0131r (\u00f6rne\u011fin, <code>https:\/\/your-space-name.nyc3.digitaloceanspaces.com<\/code>).<br \/>\n*   <strong>Opsiyonel Ayarlar:<\/strong><br \/>\n    *   <strong>CDN (Content Delivery Network):<\/strong> E\u011fer Space&#8217;i statik i\u00e7erik da\u011f\u0131t\u0131m\u0131 i\u00e7in de kullanacaksan\u0131z CDN&#8217;i etkinle\u015ftirebilirsiniz. Yedekleme i\u00e7in zorunlu de\u011fildir.<br \/>\n    *   <strong>Dosya Eri\u015fimi:<\/strong> Varsay\u0131lan olarak dosyalar \u00f6zeldir. Yedekleme i\u00e7in bu ayar\u0131 de\u011fi\u015ftirmeyin.<br \/>\n*   <strong>&#8220;Create a Space&#8221; Butonuna T\u0131klayarak Tamamlay\u0131n:<\/strong> Space&#8217;iniz birka\u00e7 saniye i\u00e7inde olu\u015fturulacakt\u0131r.<\/p>\n<h4>2. API Anahtarlar\u0131 Olu\u015fturma<\/h4>\n<p>DigitalOcean Spaces&#8217;e programatik olarak (\u00f6rne\u011fin AWS CLI ile) eri\u015fmek i\u00e7in API anahtarlar\u0131na ihtiyac\u0131n\u0131z olacakt\u0131r. Bu anahtarlar, kullan\u0131c\u0131 ad\u0131n\u0131z ve \u015fifreniz gibidir, bu y\u00fczden onlar\u0131 g\u00fcvende tutmak \u00e7ok \u00f6nemlidir.<\/p>\n<p>*   <strong>&#8220;API&#8221; B\u00f6l\u00fcm\u00fcne Gidin:<\/strong> DigitalOcean kontrol panelinde sol men\u00fcden &#8220;API&#8221; se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n*   <strong>&#8220;Spaces Access Keys&#8221; B\u00f6l\u00fcm\u00fcn\u00fc Bulun:<\/strong> Bu b\u00f6l\u00fcmde, Spaces&#8217;e \u00f6zel eri\u015fim anahtarlar\u0131n\u0131 g\u00f6receksiniz.<br \/>\n*   <strong>&#8220;Generate New Key&#8221; Butonuna T\u0131klay\u0131n:<\/strong> Yeni bir eri\u015fim anahtar\u0131 \u00e7ifti olu\u015fturmak i\u00e7in bu butonu kullan\u0131n.<br \/>\n*   <strong>Anahtar Ad\u0131 Belirleyin:<\/strong> Anahtar\u0131n\u0131za a\u00e7\u0131klay\u0131c\u0131 bir isim verin (\u00f6rne\u011fin, &#8220;git-backup-key&#8221;).<br \/>\n*   <strong>Eri\u015fim Anahtarlar\u0131n\u0131 Kopyalay\u0131n:<\/strong> Yeni bir pencerede size iki anahtar g\u00f6sterilecektir:<br \/>\n    *   <strong>Access Key ID:<\/strong> Genel anahtar.<br \/>\n    *   <strong>Secret Access Key:<\/strong> Gizli anahtar. Bu anahtar sadece bir kez g\u00f6sterilir. Bu nedenle, g\u00fcvenli bir yere (\u00f6rne\u011fin, bir parola y\u00f6neticisi) kopyalad\u0131\u011f\u0131n\u0131zdan emin olun. Bu anahtar\u0131 kaybederseniz, yeni bir anahtar olu\u015fturman\u0131z gerekir.<\/p>\n<p>Bu anahtarlar, AWS CLI&#8217;yi yap\u0131land\u0131r\u0131rken veya yedekleme betiklerinizde Spaces&#8217;e kimlik do\u011frulamas\u0131 yapmak i\u00e7in kullan\u0131lacakt\u0131r.<\/p>\n<h3>Git Depolar\u0131n\u0131 DigitalOcean Spaces&#8217;e Yedekleme Ad\u0131mlar\u0131<\/h3>\n<p>Bu b\u00f6l\u00fcmde, Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces&#8217;e yedeklemek i\u00e7in iki temel y\u00f6ntemi ele alaca\u011f\u0131z: AWS CLI kullanarak tam yedekleme ve <code>git bundle<\/code> kullanarak art\u0131ml\u0131 yedekleme. Her iki y\u00f6ntem de Spaces&#8217;in S3 uyumlulu\u011fundan faydalan\u0131r.<\/p>\n<h4>Y\u00f6ntem 1: AWS CLI Kullanarak Bare Repository Yedekleme<\/h4>\n<p>AWS CLI (Amazon Web Services Command Line Interface), S3 uyumlu depolama hizmetleriyle etkile\u015fim kurmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. DigitalOcean Spaces de S3 uyumlu oldu\u011fu i\u00e7in AWS CLI&#8217;yi kullanabiliriz.<\/p>\n<h5>1. AWS CLI Kurulumu<\/h5>\n<p>AWS CLI&#8217;yi hen\u00fcz kurmad\u0131ysan\u0131z, i\u015fletim sisteminize g\u00f6re a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyin:<\/p>\n<p>*   <strong>Linux\/macOS:<\/strong><\/p>\n<pre><code class=\"language-bash\">curl \"https:\/\/awscli.amazonaws.com\/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\"\n    unzip awscliv2.zip\n    sudo .\/aws\/install\n    # Veya macOS i\u00e7in Homebrew ile:\n    # brew install awscli<\/code><\/pre>\n<p>*   <strong>Windows:<\/strong> AWS CLI MSI y\u00fckleyicisini AWS web sitesinden indirin ve kurun.<\/p>\n<p>Kurulumdan sonra, terminalinizde <code>aws --version<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<h5>2. AWS CLI Yap\u0131land\u0131rmas\u0131<\/h5>\n<p>AWS CLI&#8217;yi DigitalOcean Spaces ile \u00e7al\u0131\u015facak \u015fekilde yap\u0131land\u0131rman\u0131z gerekir. Bu i\u015flem s\u0131ras\u0131nda daha \u00f6nce olu\u015fturdu\u011funuz API anahtarlar\u0131n\u0131 kullanacaks\u0131n\u0131z.<\/p>\n<pre><code class=\"language-bash\">aws configure<\/code><\/pre>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki bilgileri girmeniz istenecektir:<br \/>\n*   <strong>AWS Access Key ID:<\/strong> DigitalOcean Spaces Access Key ID&#8217;nizi buraya yap\u0131\u015ft\u0131r\u0131n.<br \/>\n*   <strong>AWS Secret Access Key:<\/strong> DigitalOcean Spaces Secret Access Key&#8217;inizi buraya yap\u0131\u015ft\u0131r\u0131n.<br \/>\n*   <strong>Default region name:<\/strong> DigitalOcean Spaces&#8217;inizin bulundu\u011fu b\u00f6lgeyi girin (\u00f6rne\u011fin, <code>nyc3<\/code>, <code>fra1<\/code>, <code>lon1<\/code>). Bu, S3 endpoint URL&#8217;sinde kullan\u0131lacakt\u0131r.<br \/>\n*   <strong>Default output format:<\/strong> <code>json<\/code> olarak b\u0131rakabilirsiniz.<\/p>\n<p><strong>\u00d6nemli:<\/strong> AWS CLI, varsay\u0131lan olarak AWS S3 hizmetine ba\u011flanmaya \u00e7al\u0131\u015f\u0131r. DigitalOcean Spaces&#8217;e ba\u011flanmak i\u00e7in, her komutta veya bir yap\u0131land\u0131rma dosyas\u0131nda endpoint URL&#8217;sini belirtmeniz gerekir. En temiz yol, komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rken <code>endpoint-url<\/code> parametresini kullanmakt\u0131r.<\/p>\n<h5>3. Bare Repository Olu\u015fturma<\/h5>\n<p>Yedeklemek istedi\u011finiz yerel Git deponuzun bir <code>bare<\/code> kopyas\u0131n\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">cd \/path\/to\/your\/local\/repo\ngit clone --bare . \/tmp\/myproject.git<\/code><\/pre>\n<p>Bu komut, mevcut deponuzun (<code>.<\/code>) <code>bare<\/code> bir kopyas\u0131n\u0131 <code>\/tmp\/myproject.git<\/code> dizinine olu\u015fturur. <code>\/tmp<\/code> yerine istedi\u011finiz herhangi bir ge\u00e7ici dizini kullanabilirsiniz.<\/p>\n<h5>4. Spaces&#8217;e Y\u00fckleme<\/h5>\n<p>\u015eimdi olu\u015fturdu\u011funuz <code>bare<\/code> depoyu DigitalOcean Spaces&#8217;e y\u00fckleyebilirsiniz. <code>aws s3 sync<\/code> komutu, yerel bir dizini bir S3\/Spaces kovas\u0131na senkronize etmek i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-bash\"># B\u00f6lgeyi ve Space ad\u0131n\u0131 kendi bilgilerinizle de\u011fi\u015ftirin\nSPACE_REGION=\"nyc3\" # \u00d6rne\u011fin nyc3, fra1, lon1\nSPACE_NAME=\"your-space-name\"\nREPO_BACKUP_NAME=\"myproject.git\" # Space i\u00e7inde deponuzun ad\u0131\n\naws s3 sync \/tmp\/${REPO_BACKUP_NAME} \\\n    s3:\/\/${SPACE_NAME}\/${REPO_BACKUP_NAME} \\\n    --endpoint-url https:\/\/${SPACE_REGION}.digitaloceanspaces.com<\/code><\/pre>\n<p>*   <code>--endpoint-url<\/code>: DigitalOcean Spaces&#8217;in endpoint URL&#8217;sini belirtir. <code>https:\/\/<b\u00f6lge>.digitaloceanspaces.com<\/code> format\u0131ndad\u0131r.<br \/>\n*   <code>s3:\/\/${SPACE_NAME}\/${REPO_BACKUP_NAME}<\/code>: Hedef Spaces yoludur. <code>${SPACE_NAME}<\/code> yerine kendi Space ad\u0131n\u0131z\u0131, <code>${REPO_BACKUP_NAME}<\/code> yerine de yedeklenen deponuzun ad\u0131n\u0131 yaz\u0131n.<\/p>\n<p>Bu komut, <code>\/tmp\/myproject.git<\/code> dizininin i\u00e7eri\u011fini DigitalOcean Spaces&#8217;inizdeki <code>your-space-name\/myproject.git<\/code> yoluna senkronize edecektir. Gelecekte ayn\u0131 komutu tekrar \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, <code>aws s3 sync<\/code> yaln\u0131zca de\u011fi\u015fen veya yeni eklenen dosyalar\u0131 y\u00fckleyerek bant geni\u015fli\u011finden tasarruf edecektir.<\/p>\n<h4>Y\u00f6ntem 2: <code>git bundle<\/code> ile Yedekleme<\/h4>\n<p><code>git bundle<\/code> y\u00f6ntemi, deponuzu tek bir dosya halinde paketleyip bu dosyay\u0131 Spaces&#8217;e y\u00fcklemeyi i\u00e7erir. Bu, \u00f6zellikle art\u0131ml\u0131 yedeklemeler i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h5>1. Bundle Olu\u015fturma<\/h5>\n<p>Yedeklemek istedi\u011finiz yerel Git deponuzda a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<p>*   <strong>Tam Yedekleme (\u0130lk Bundle):<\/strong><\/p>\n<pre><code class=\"language-bash\">cd \/path\/to\/your\/local\/repo\n    git bundle create myproject-full-backup-$(date +%Y%m%d).bundle --all<\/code><\/pre>\n<p>    Bu komut, deponuzun t\u00fcm ge\u00e7mi\u015fini i\u00e7eren <code>myproject-full-backup-YYYYMMDD.bundle<\/code> ad\u0131nda bir dosya olu\u015fturur.<\/p>\n<p>*   <strong>Art\u0131ml\u0131 Yedekleme (Sonraki Bundle&#8217;lar):<\/strong><br \/>\n    \u00d6nceki bir bundle dosyas\u0131ndan bu yana yap\u0131lan de\u011fi\u015fiklikleri yedeklemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">cd \/path\/to\/your\/local\/repo\n    # \u00d6nceki bundle dosyas\u0131n\u0131n yolunu belirtin\n    PREVIOUS_BUNDLE=\"\/path\/to\/previous\/myproject-full-backup-$(date -d '1 week ago' +%Y%m%d).bundle\" \n    \n    git bundle create myproject-incremental-backup-$(date +%Y%m%d).bundle ${PREVIOUS_BUNDLE}..HEAD<\/code><\/pre>\n<p>    Bu komut, <code>PREVIOUS_BUNDLE<\/code>&#8216;dan bu yana <code>HEAD<\/code>&#8216;deki t\u00fcm yeni referanslar\u0131 ve nesneleri i\u00e7eren yeni bir bundle dosyas\u0131 olu\u015fturur. <code>date -d '1 week ago'<\/code> k\u0131sm\u0131, \u00f6nceki haftan\u0131n tarihini dinamik olarak almak i\u00e7in bir \u00f6rnektir; bunu kendi yedekleme stratejinize g\u00f6re ayarlamal\u0131s\u0131n\u0131z.<\/p>\n<h5>2. Spaces&#8217;e Y\u00fckleme<\/h5>\n<p>Olu\u015fturdu\u011funuz <code>.bundle<\/code> dosyas\u0131n\u0131 DigitalOcean Spaces&#8217;e y\u00fcklemek i\u00e7in <code>aws s3 cp<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\"># B\u00f6lgeyi ve Space ad\u0131n\u0131 kendi bilgilerinizle de\u011fi\u015ftirin\nSPACE_REGION=\"nyc3\"\nSPACE_NAME=\"your-space-name\"\nBUNDLE_FILE=\"myproject-full-backup-$(date +%Y%m%d).bundle\" # Veya art\u0131ml\u0131 bundle dosyan\u0131z\u0131n ad\u0131\n\naws s3 cp ${BUNDLE_FILE} \\\n    s3:\/\/${SPACE_NAME}\/bundles\/${BUNDLE_FILE} \\\n    --endpoint-url https:\/\/${SPACE_REGION}.digitaloceanspaces.com<\/code><\/pre>\n<p>Bu komut, bundle dosyas\u0131n\u0131 <code>your-space-name\/bundles\/<\/code> klas\u00f6r\u00fcne y\u00fckler. <code>bundles<\/code> klas\u00f6r\u00fc, yedeklerinizi d\u00fczenli tutmak i\u00e7in iste\u011fe ba\u011fl\u0131 olarak olu\u015fturdu\u011funuz bir klas\u00f6rd\u00fcr.<\/p>\n<p>Bu iki y\u00f6ntem de Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces&#8217;e g\u00fcvenli bir \u015fekilde yedeklemek i\u00e7in kullan\u0131labilir. Se\u00e7iminiz, deponuzun boyutu, yedekleme s\u0131kl\u0131\u011f\u0131 ve geri y\u00fckleme stratejiniz gibi fakt\u00f6rlere ba\u011fl\u0131 olacakt\u0131r.<\/p>\n<h3>Yedekleme Betikleri (Script) Olu\u015fturma<\/h3>\n<p>Manuel yedeklemeler zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k olabilir. Bu nedenle, yukar\u0131daki ad\u0131mlar\u0131 otomatikle\u015ftiren bir betik (script) olu\u015fturmak ve bunu d\u00fczenli olarak \u00e7al\u0131\u015ft\u0131rmak en iyi uygulamad\u0131r. \u0130\u015fte hem bare repository hem de bundle tabanl\u0131 yedekleme i\u00e7in \u00f6rnek bir Bash beti\u011fi.<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\n\n<h2>--- Yap\u0131land\u0131rma ---<\/h2>\n<h2>DigitalOcean Spaces Bilgileri<\/h2>\nSPACE_REGION=\"nyc3\" # DigitalOcean Spaces b\u00f6lgeniz (\u00f6rn: nyc3, fra1)\nSPACE_NAME=\"your-space-name\" # Space ad\u0131n\u0131z\n\n<h2>Yedeklenecek Git Depolar\u0131 Listesi (tam yolunu belirtin)<\/h2>\n<h2>Her repo i\u00e7in ayr\u0131 bir sat\u0131r ekleyin<\/h2>\nREPOS_TO_BACKUP=(\n    \"\/home\/user\/projects\/my-web-app\"\n    \"\/home\/user\/projects\/my-api-service\"\n)\n\n<h2>Yedekleme \u00c7\u0131kt\u0131 Dizini (ge\u00e7ici dosyalar i\u00e7in)<\/h2>\nBACKUP_TEMP_DIR=\"\/tmp\/git_backups\"\n\n<h2>Log Dosyas\u0131<\/h2>\nLOG_FILE=\"\/var\/log\/git_backup_to_spaces.log\"\n\n<h2>Saklanacak Son X G\u00fcnl\u00fck Yedekler (sadece bundle y\u00f6ntemi i\u00e7in ge\u00e7erlidir)<\/h2>\nDAYS_TO_KEEP=7\n\n<h2>--- Fonksiyonlar ---<\/h2>\n\nlog_message() {\n    echo \"$(date '+%Y-%m-%d %H:%M:%S') - $1\" | tee -a \"$LOG_FILE\"\n}\n\n<h2>--- Ba\u015flang\u0131\u00e7 ---<\/h2>\nlog_message \"--- Git Yedekleme S\u00fcreci Ba\u015flad\u0131 ---\"\n\n<h2>Yedekleme dizinini olu\u015ftur (varsa siler)<\/h2>\nif [ -d \"$BACKUP_TEMP_DIR\" ]; then\n    log_message \"Ge\u00e7ici yedekleme dizini temizleniyor: $BACKUP_TEMP_DIR\"\n    rm -rf \"$BACKUP_TEMP_DIR\"\nfi\nmkdir -p \"$BACKUP_TEMP_DIR\" || { log_message \"HATA: Ge\u00e7ici dizin olu\u015fturulamad\u0131.\"; exit 1; }\n\n<h2>Her depoyu yedekle<\/h2>\nfor REPO_PATH in \"${REPOS_TO_BACKUP[@]}\"; do\n    if [ ! -d \"$REPO_PATH\" ]; then\n        log_message \"UYARI: Depo yolu bulunamad\u0131, atlan\u0131yor: $REPO_PATH\"\n        continue\n    fi\n\n    REPO_NAME=$(basename \"$REPO_PATH\")\n    log_message \"Depo yedekleniyor: $REPO_NAME\"\n\n    # --- Y\u00f6ntem 1: Bare Repository Yedekleme ---\n    # Bare depo olu\u015ftur\n    BARE_REPO_DIR=\"${BACKUP_TEMP_DIR}\/${REPO_NAME}.git\"\n    log_message \"Bare depo olu\u015fturuluyor: $BARE_REPO_DIR\"\n    git clone --bare \"$REPO_PATH\" \"$BARE_REPO_DIR\" || { log_message \"HATA: Bare depo olu\u015fturulamad\u0131.\"; continue; }\n\n    # Spaces'e senkronize et\n    log_message \"Bare depoyu DigitalOcean Spaces'e senkronize ediliyor...\"\n    aws s3 sync \"$BARE_REPO_DIR\" \\\n        \"s3:\/\/${SPACE_NAME}\/bare-repos\/${REPO_NAME}.git\" \\\n        --endpoint-url \"https:\/\/${SPACE_REGION}.digitaloceanspaces.com\" \\\n        --delete # Bu flag, Space'teki mevcut dosyalar\u0131 yereldekiyle e\u015fle\u015fecek \u015fekilde siler. Dikkatli kullan\u0131n!\n    if [ $? -eq 0 ]; then\n        log_message \"Bare depo yedeklemesi BA\u015eARILI: ${REPO_NAME}\"\n    else\n        log_message \"HATA: Bare depo yedeklemesi BA\u015eARISIZ: ${REPO_NAME}\"\n    fi\n\n    # --- Y\u00f6ntem 2: Git Bundle ile Art\u0131ml\u0131 Yedekleme (\u0130ste\u011fe Ba\u011fl\u0131) ---\n    # E\u011fer bu y\u00f6ntemi kullanmayacaksan\u0131z a\u015fa\u011f\u0131daki blo\u011fu yorum sat\u0131r\u0131 yap\u0131n veya silin.\n    # Bu y\u00f6ntem, daha \u00f6nce Spaces'e y\u00fcklenmi\u015f bir bundle dosyas\u0131n\u0131n varl\u0131\u011f\u0131n\u0131 gerektirir.\n    # \u0130lk \u00e7al\u0131\u015ft\u0131rmada tam bundle olu\u015fturulmal\u0131 veya bu k\u0131s\u0131m atlanmal\u0131d\u0131r.\n\n    # CURRENT_DATE=$(date +%Y%m%d)\n    # BUNDLE_FILE=\"${BACKUP_TEMP_DIR}\/${REPO_NAME}-${CURRENT_DATE}.bundle\"\n    # PREVIOUS_BUNDLE_PATH=\"s3:\/\/${SPACE_NAME}\/bundles\/${REPO_NAME}-$(date -d \"${DAYS_TO_KEEP} days ago\" +%Y%m%d)*.bundle\" # \u00d6nceki bundle'\u0131 Space'ten arama\n    \n    # # \u00d6nceki bundle dosyas\u0131n\u0131 Spaces'ten indir (art\u0131ml\u0131 yedekleme i\u00e7in gerekli)\n    # log_message \"\u00d6nceki bundle aran\u0131yor ve indiriliyor (varsa)...\"\n    # # Bu k\u0131s\u0131m daha karma\u015f\u0131k olabilir, do\u011frudan S3'ten bir \u00f6nceki bundle'\u0131 bulmak yerine\n    # # yerel olarak son bundle'\u0131n ad\u0131n\u0131 saklamak daha pratik olabilir.\n    # # Basitlik ad\u0131na, \u015fimdilik tam bundle olu\u015fturaca\u011f\u0131z veya manuel olarak \u00f6nceki bundle'\u0131 belirtmeliyiz.\n\n    # # Tam bundle olu\u015fturma (ilk yedekleme veya belirli aral\u0131klarla)\n    # log_message \"Tam bundle olu\u015fturuluyor: ${BUNDLE_FILE}\"\n    # git bundle create \"$BUNDLE_FILE\" --all || { log_message \"HATA: Bundle olu\u015fturulamad\u0131.\"; continue; }\n\n    # # Spaces'e y\u00fckle\n    # log_message \"Bundle dosyas\u0131n\u0131 DigitalOcean Spaces'e y\u00fckleniyor...\"\n    # aws s3 cp \"$BUNDLE_FILE\" \\\n    #     \"s3:\/\/${SPACE_NAME}\/bundles\/${REPO_NAME}\/${BUNDLE_FILE##*\/}\" \\\n    #     --endpoint-url \"https:\/\/${SPACE_REGION}.digitaloceanspaces.com\"\n    # if [ $? -eq 0 ]; then\n    #     log_message \"Bundle yedeklemesi BA\u015eARILI: ${REPO_NAME}\"\n    # else\n    #     log_message \"HATA: Bundle yedeklemesi BA\u015eARISIZ: ${REPO_NAME}\"\n    # fi\n    \n    # # Eski bundle'lar\u0131 temizle (iste\u011fe ba\u011fl\u0131, AWS CLI ile ya\u015fam d\u00f6ng\u00fcs\u00fc politikalar\u0131 daha iyidir)\n    # # Not: Bu k\u0131s\u0131m AWS CLI'nin kendi ya\u015fam d\u00f6ng\u00fcs\u00fc politikalar\u0131 kadar esnek de\u011fildir.\n    # # Sadece \u00f6rnek ama\u00e7l\u0131d\u0131r.\n    # # log_message \"Eski bundle dosyalar\u0131 temizleniyor...\"\n    # # find \"${BACKUP_TEMP_DIR}\" -name \"${REPO_NAME}-*.bundle\" -mtime +${DAYS_TO_KEEP} -delete\n    # # log_message \"Eski bundle'lar Space'ten siliniyor (dikkatli olun!):\"\n    # # aws s3 rm \"s3:\/\/${SPACE_NAME}\/bundles\/${REPO_NAME}\/\" --recursive --exclude \"<em>\" --include \"${REPO_NAME}-$(date -d \"${DAYS_TO_KEEP} days ago\" +%Y%m%d)<\/em>.bundle\" --endpoint-url \"https:\/\/${SPACE_REGION}.digitaloceanspaces.com\"\n\ndone\n\n<h2>Ge\u00e7ici yedekleme dizinini temizle<\/h2>\nlog_message \"Ge\u00e7ici yedekleme dizini temizleniyor: $BACKUP_TEMP_DIR\"\nrm -rf \"$BACKUP_TEMP_DIR\"\n\nlog_message \"--- Git Yedekleme S\u00fcreci Tamamland\u0131 ---\"<\/code><\/pre>\n<p>Bu betik, bare repository y\u00f6ntemini kullan\u0131r. Bundle y\u00f6ntemini de dahil ettim ancak karma\u015f\u0131kl\u0131\u011f\u0131 nedeniyle yorum sat\u0131r\u0131 yapt\u0131m. Art\u0131ml\u0131 bundle yedeklemeleri, \u00f6nceki bundle&#8217;lar\u0131 y\u00f6netmeyi gerektirdi\u011fi i\u00e7in daha sofistike bir betik gerektirir.<\/p>\n<h4>Cron Job ile Otomatikle\u015ftirme<\/h4>\n<p>Betik haz\u0131r olduktan sonra, onu d\u00fczenli aral\u0131klarla \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir cron i\u015fi ayarlayabilirsiniz.<\/p>\n<p>1.  <strong>Betik \u0130zinlerini Ayarlay\u0131n:<\/strong><\/p>\n<pre><code class=\"language-bash\">chmod +x \/path\/to\/your\/backup_script.sh<\/code><\/pre>\n<p>2.  <strong>Crontab&#8217;\u0131 D\u00fczenleyin:<\/strong><\/p>\n<pre><code class=\"language-bash\">crontab -e<\/code><\/pre>\n<p>3.  <strong>Cron \u0130fadesi Ekleyin:<\/strong><br \/>\n    A\u015fa\u011f\u0131daki \u00f6rnek, beti\u011fi her g\u00fcn saat 03:00&#8217;te \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-cron\">0 3 <em> <\/em> * \/path\/to\/your\/backup_script.sh > \/dev\/null 2>&1<\/code><\/pre>\n<p>    <em>   <code>0 3 <\/em> <em> <\/em><\/code>: Her g\u00fcn sabah 03:00&#8217;te \u00e7al\u0131\u015ft\u0131r.<br \/>\n    *   <code>> \/dev\/null 2>&1<\/code>: \u00c7\u0131kt\u0131y\u0131 gizler. Hata ay\u0131klama i\u00e7in bu k\u0131sm\u0131 kald\u0131rabilir veya \u00e7\u0131kt\u0131y\u0131 bir dosyaya y\u00f6nlendirebilirsiniz (\u00f6rne\u011fin, <code>>> \/var\/log\/cron_backup.log<\/code>).<\/p>\n<p>Cron i\u015fini ayarlad\u0131ktan sonra, yedeklemeleriniz otomatik olarak \u00e7al\u0131\u015fmaya ba\u015flayacakt\u0131r. Log dosyas\u0131n\u0131 d\u00fczenli olarak kontrol ederek yedekleme s\u00fcrecinin sorunsuz ilerledi\u011finden emin olun.<\/p>\n<h3>G\u00fcvenlik ve En \u0130yi Uygulamalar<\/h3>\n<p>Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces&#8217;e yedeklerken g\u00fcvenlik ve en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak, verilerinizin korunmas\u0131n\u0131 sa\u011flaman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h4>API Anahtarlar\u0131n\u0131n G\u00fcvenli\u011fi<\/h4>\n<p>*   <strong>Ortam De\u011fi\u015fkenleri:<\/strong> API anahtarlar\u0131n\u0131z\u0131 do\u011frudan betik dosyalar\u0131na yazmaktan ka\u00e7\u0131n\u0131n. Bunun yerine, anahtarlar\u0131 ortam de\u011fi\u015fkenleri olarak ayarlay\u0131n (\u00f6rne\u011fin, <code>.bashrc<\/code> veya <code>.profile<\/code> dosyan\u0131zda <code>export DO_SPACES_ACCESS_KEY_ID=\"YOUR_ACCESS_KEY\"<\/code>). AWS CLI, bu ortam de\u011fi\u015fkenlerini otomatik olarak alg\u0131layacakt\u0131r.<br \/>\n*   <strong>S\u0131n\u0131rl\u0131 \u0130zinler:<\/strong> M\u00fcmk\u00fcnse, API anahtarlar\u0131n\u0131za yaln\u0131zca yedekleme i\u00e7in gerekli olan minimum izinleri verin (\u00f6rne\u011fin, sadece yazma ve okuma izinleri). DigitalOcean&#8217;da \u015fu an i\u00e7in S3 benzeri IAM (Identity and Access Management) rolleri bulunmamaktad\u0131r, ancak gelecekte bu t\u00fcr \u00f6zellikler eklenebilir.<br \/>\n*   <strong>D\u00fczenli De\u011fi\u015fim:<\/strong> G\u00fcvenlik ihlallerini \u00f6nlemek i\u00e7in API anahtarlar\u0131n\u0131z\u0131 d\u00fczenli aral\u0131klarla (\u00f6rne\u011fin, her 6 ayda bir) de\u011fi\u015ftirin.<\/p>\n<h4>Veri \u015eifrelemesi<\/h4>\n<p>*   <strong>\u0130stemci Taraf\u0131 \u015eifreleme:<\/strong> Hassas veriler i\u00e7eren depolar\u0131 yedeklemeden \u00f6nce yerel olarak \u015fifrelemeyi d\u00fc\u015f\u00fcnebilirsiniz (\u00f6rne\u011fin, <code>gpg<\/code> veya <code>openssl<\/code> kullanarak). Bu, verileriniz Spaces&#8217;e y\u00fcklenmeden \u00f6nce \u015fifrelenir ve DigitalOcean&#8217;\u0131n kendisi bile \u015fifreli i\u00e7eri\u011fi g\u00f6remez.<br \/>\n*   <strong>Spaces Taraf\u0131 \u015eifreleme:<\/strong> DigitalOcean Spaces, varsay\u0131lan olarak depolanan verileri dinlenirken (at rest) \u015fifreler. Ancak bu, verilerinize eri\u015fimi olan herkesin okuyabilece\u011fi anlam\u0131na gelir. \u0130stemci taraf\u0131 \u015fifreleme, ek bir g\u00fcvenlik katman\u0131 sa\u011flar.<\/p>\n<h4>Yedekleme S\u0131kl\u0131\u011f\u0131<\/h4>\n<p>*   <strong>Projenin De\u011fi\u015fim S\u0131kl\u0131\u011f\u0131:<\/strong> Projeniz ne kadar s\u0131k de\u011fi\u015fiyorsa, yedekleme s\u0131kl\u0131\u011f\u0131n\u0131z da o kadar artmal\u0131d\u0131r. G\u00fcnl\u00fck yedeklemeler, \u00e7o\u011fu proje i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. \u00c7ok aktif projeler i\u00e7in saatlik yedeklemeler d\u00fc\u015f\u00fcn\u00fclebilir.<br \/>\n*   <strong>Veri Kayb\u0131 Tolerans\u0131:<\/strong> Ne kadar veri kayb\u0131n\u0131 tolere edebilece\u011finizi belirleyin. Son bir saatlik \u00e7al\u0131\u015fman\u0131n kaybolmas\u0131 kabul edilemezse, yedeklemeler daha s\u0131k olmal\u0131d\u0131r.<\/p>\n<h4>Yedeklerin D\u00fczenli Test Edilmesi<\/h4>\n<p>*   <strong>Geri Y\u00fckleme Prati\u011fi:<\/strong> Yedekleme sisteminizin ger\u00e7ekten \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olman\u0131n tek yolu, d\u00fczenli olarak yedeklerden geri y\u00fckleme yapmay\u0131 denemektir. Belirli aral\u0131klarla (\u00f6rne\u011fin, ayda bir) bir yedek kopyas\u0131n\u0131 al\u0131p yeni bir dizine geri y\u00fckleyerek deponun b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc kontrol edin.<br \/>\n*   <strong>Dosya B\u00fct\u00fcnl\u00fc\u011f\u00fc:<\/strong> Geri y\u00fcklenen deponun orijinal depo ile ayn\u0131 oldu\u011fundan emin olmak i\u00e7in <code>git fsck<\/code> gibi komutlar\u0131 kullanabilirsiniz.<\/p>\n<h4>Eski Yedeklerin Y\u00f6netimi (Ya\u015fam D\u00f6ng\u00fcs\u00fc Politikalar\u0131)<\/h4>\n<p>*   <strong>Depolama Maliyetleri:<\/strong> S\u00fcrekli yeni yedekler olu\u015fturmak, depolama maliyetlerini art\u0131rabilir. DigitalOcean Spaces, S3 uyumlu ya\u015fam d\u00f6ng\u00fcs\u00fc politikalar\u0131n\u0131 desteklemez, ancak betiklerinizde eski yedekleri belirli bir s\u00fcre sonra otomatik olarak silme mant\u0131\u011f\u0131 ekleyebilirsiniz.<br \/>\n*   <strong>Betik ile Temizleme:<\/strong> Yedekleme beti\u011finize, belirli bir ya\u015f\u0131n \u00fczerindeki (\u00f6rne\u011fin, 30 g\u00fcnden eski) yedek dosyalar\u0131n\u0131 Spaces&#8217;ten silme komutlar\u0131 ekleyin. <code>aws s3 rm<\/code> komutunu dikkatli kullan\u0131n.<\/p>\n<pre><code class=\"language-bash\"># \u00d6rnek: 30 g\u00fcnden eski bundle dosyalar\u0131n\u0131 silme\n    # Bu komutu kullanmadan \u00f6nce \u00e7ok dikkatli olun ve test edin!\n    # aws s3 rm s3:\/\/${SPACE_NAME}\/bundles\/${REPO_NAME}\/ --recursive --exclude \"<em>\" --include \"${REPO_NAME}-$(date -d '30 days ago' +%Y%m%d)<\/em>.bundle\" --endpoint-url \"https:\/\/${SPACE_REGION}.digitaloceanspaces.com\"<\/code><\/pre>\n<p>    Veya daha basit bir yakla\u015f\u0131m olarak, yedekleme dizininize tarih bazl\u0131 klas\u00f6rler olu\u015fturup, en eski klas\u00f6rleri silmek olabilir.<\/p>\n<h4>Farkl\u0131 B\u00f6lgelerde Yedekleme<\/h4>\n<p>Ekstra bir g\u00fcvenlik katman\u0131 i\u00e7in, yedeklerinizin bir kopyas\u0131n\u0131 farkl\u0131 bir DigitalOcean Spaces b\u00f6lgesinde veya hatta farkl\u0131 bir bulut sa\u011flay\u0131c\u0131s\u0131nda tutmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Bu, bir b\u00f6lge felaketi durumunda verilerinizin g\u00fcvende kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu en iyi uygulamalar\u0131 takip ederek, Git depolar\u0131n\u0131z\u0131n DigitalOcean Spaces&#8217;e yedeklenmesini g\u00fcvenli, verimli ve g\u00fcvenilir hale getirebilirsiniz.<\/p>\n<h3>Yedekten Geri Y\u00fckleme (Kurtarma)<\/h3>\n<p>Yedekleme yapman\u0131n nihai amac\u0131, gerekti\u011finde verileri geri y\u00fckleyebilmektir. Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces&#8217;ten geri y\u00fcklemek, kulland\u0131\u011f\u0131n\u0131z yedekleme y\u00f6ntemine ba\u011fl\u0131 olarak de\u011fi\u015fir.<\/p>\n<h4>1. Bare Repository&#8217;den Geri Y\u00fckleme<\/h4>\n<p>E\u011fer deponuzu <code>git clone --bare<\/code> ile yedeklediyseniz ve <code>aws s3 sync<\/code> ile Spaces&#8217;e y\u00fcklediyseniz, geri y\u00fckleme s\u00fcreci olduk\u00e7a basittir.<\/p>\n<p>*   <strong>Bare Depoyu \u0130ndirme:<\/strong> \u0130lk olarak, yedeklenmi\u015f <code>bare<\/code> depoyu DigitalOcean Spaces&#8217;ten yerel makinenize indirin:<\/p>\n<pre><code class=\"language-bash\"># B\u00f6lgeyi ve Space ad\u0131n\u0131 kendi bilgilerinizle de\u011fi\u015ftirin\n    SPACE_REGION=\"nyc3\"\n    SPACE_NAME=\"your-space-name\"\n    REPO_BACKUP_NAME=\"myproject.git\" # Space i\u00e7inde deponuzun ad\u0131\n    TARGET_DIR=\"\/path\/to\/restore\/myproject.git\" # Bare deponun indirilece\u011fi yer\n\n    aws s3 sync \"s3:\/\/${SPACE_NAME}\/bare-repos\/${REPO_BACKUP_NAME}\" \\\n        \"$TARGET_DIR\" \\\n        --endpoint-url \"https:\/\/${SPACE_REGION}.digitaloceanspaces.com\"<\/code><\/pre>\n<p>    Bu komut, <code>myproject.git<\/code> adl\u0131 <code>bare<\/code> depoyu <code>$TARGET_DIR<\/code> dizinine indirir.<\/p>\n<p>*   <strong>\u00c7al\u0131\u015fma A\u011fac\u0131 Olu\u015fturma:<\/strong> \u0130ndirilen <code>bare<\/code> depodan normal bir \u00e7al\u0131\u015fma a\u011fac\u0131na sahip bir depo olu\u015fturmak i\u00e7in <code>git clone<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\"># \u0130ndirilen bare deponun yolu\n    BARE_REPO_PATH=\"\/path\/to\/restore\/myproject.git\"\n    # Yeni deponun olu\u015fturulaca\u011f\u0131 yol\n    NEW_REPO_PATH=\"\/path\/to\/new\/myproject\"\n\n    git clone \"$BARE_REPO_PATH\" \"$NEW_REPO_PATH\"\n    cd \"$NEW_REPO_PATH\"\n    # Art\u0131k normal bir Git deposu olarak \u00e7al\u0131\u015fabilirsiniz<\/code><\/pre>\n<p>    Bu i\u015flem, deponun t\u00fcm dallar\u0131n\u0131 ve ge\u00e7mi\u015fini i\u00e7eren tam bir \u00e7al\u0131\u015fma kopyas\u0131n\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h4>2. <code>git bundle<\/code> Dosyas\u0131ndan Geri Y\u00fckleme<\/h4>\n<p>E\u011fer deponuzu <code>git bundle<\/code> ile yedeklediyseniz, geri y\u00fckleme s\u00fcreci bundle dosyas\u0131n\u0131 indirip ondan depo olu\u015fturmay\u0131 veya mevcut bir depoya de\u011fi\u015fiklikleri getirmeyi i\u00e7erir.<\/p>\n<p>*   <strong>Bundle Dosyas\u0131n\u0131 \u0130ndirme:<\/strong> \u0130htiya\u00e7 duydu\u011funuz <code>.bundle<\/code> dosyas\u0131n\u0131 DigitalOcean Spaces&#8217;ten yerel makinenize indirin:<\/p>\n<pre><code class=\"language-bash\"># B\u00f6lgeyi ve Space ad\u0131n\u0131 kendi bilgilerinizle de\u011fi\u015ftirin\n    SPACE_REGION=\"nyc3\"\n    SPACE_NAME=\"your-space-name\"\n    BUNDLE_FILE_NAME=\"myproject-full-backup-YYYYMMDD.bundle\" # \u0130ndirmek istedi\u011finiz bundle dosyas\u0131n\u0131n ad\u0131\n    DOWNLOAD_PATH=\"\/tmp\/${BUNDLE_FILE_NAME}\" # Bundle dosyas\u0131n\u0131n indirilece\u011fi yer\n\n    aws s3 cp \"s3:\/\/${SPACE_NAME}\/bundles\/myproject\/${BUNDLE_FILE_NAME}\" \\\n        \"$DOWNLOAD_PATH\" \\\n        --endpoint-url \"https:\/\/${SPACE_REGION}.digitaloceanspaces.com\"<\/code><\/pre>\n<p>*   <strong>Depo Olu\u015fturma veya G\u00fcncelleme:<\/strong><br \/>\n    *   <strong>Yeni Bir Depo Olu\u015fturma:<\/strong> Bundle dosyas\u0131ndan s\u0131f\u0131rdan bir depo olu\u015fturmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">git clone \"$DOWNLOAD_PATH\" \/path\/to\/new\/myproject<\/code><\/pre>\n<p>    *   <strong>Mevcut Bir Depoyu G\u00fcncelleme:<\/strong> E\u011fer mevcut bir deponuz varsa ve bundle dosyas\u0131ndaki de\u011fi\u015fiklikleri ona getirmek istiyorsan\u0131z:<\/p>\n<pre><code class=\"language-bash\">cd \/path\/to\/existing\/myproject\n        git fetch \"$DOWNLOAD_PATH\" master:master # Veya di\u011fer dallar\u0131<\/code><\/pre>\n<p>        Bu komut, bundle dosyas\u0131ndaki <code>master<\/code> dal\u0131n\u0131 mevcut deponuzun <code>master<\/code> dal\u0131na getirir (fetch eder).<\/p>\n<p>Art\u0131ml\u0131 bundle&#8217;lar kullan\u0131yorsan\u0131z, geri y\u00fckleme i\u015flemi en son tam bundle&#8217;\u0131 geri y\u00fckleyip ard\u0131ndan s\u0131ras\u0131yla t\u00fcm art\u0131ml\u0131 bundle&#8217;lar\u0131 <code>git fetch<\/code> ile uygulamay\u0131 gerektirebilir. Bu, s\u00fcreci biraz daha karma\u015f\u0131k hale getirebilir, bu y\u00fczden art\u0131ml\u0131 yedekleme stratejinizin geri y\u00fckleme prosed\u00fcr\u00fcn\u00fc \u00f6nceden belgelemeniz \u00f6nemlidir.<\/p>\n<p>Her iki durumda da, geri y\u00fckleme i\u015fleminden sonra deponuzun do\u011fru \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve t\u00fcm verilerinizin eksiksiz oldu\u011fundan emin olmak i\u00e7in testler yapmay\u0131 unutmay\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Git depolar\u0131n\u0131z\u0131 d\u00fczenli olarak yedeklemek, geli\u015ftirme s\u00fcrecinizin vazge\u00e7ilmez bir par\u00e7as\u0131 olmal\u0131d\u0131r. Bu makalede, DigitalOcean Spaces&#8217;in sundu\u011fu \u00f6l\u00e7eklenebilir ve uygun maliyetli nesne depolama \u00e7\u00f6z\u00fcm\u00fcyle Git depolar\u0131n\u0131z\u0131 nas\u0131l g\u00fcvence alt\u0131na alaca\u011f\u0131n\u0131z\u0131 detayl\u0131 bir \u015fekilde inceledik. DigitalOcean Spaces&#8217;in S3 uyumlulu\u011fu sayesinde, AWS CLI gibi g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak yedekleme i\u015flemlerinizi kolayca ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<p>Bare repository yedeklemesi ile deponuzun t\u00fcm ge\u00e7mi\u015fini ve dallar\u0131n\u0131 Spaces&#8217;e senkronize etme veya <code>git bundle<\/code> ile daha verimli art\u0131ml\u0131 yedeklemeler yapma y\u00f6ntemlerini \u00f6\u011frendiniz. Ayr\u0131ca, bu s\u00fcre\u00e7leri otomatikle\u015ftirmek i\u00e7in Bash betikleri olu\u015fturma ve cron i\u015fleri ile d\u00fczenli \u00e7al\u0131\u015ft\u0131rma ad\u0131mlar\u0131n\u0131 ele ald\u0131k. G\u00fcvenlik, veri \u015fifrelemesi, API anahtarlar\u0131n\u0131n y\u00f6netimi ve yedekleme s\u0131kl\u0131\u011f\u0131 gibi en iyi uygulamalar\u0131n \u00f6nemi \u00fczerinde durarak, verilerinizin m\u00fcmk\u00fcn olan en iyi \u015fekilde korunmas\u0131n\u0131 sa\u011flama yollar\u0131n\u0131 payla\u015ft\u0131k. Son olarak, olas\u0131 bir felaket durumunda verilerinizi Spaces&#8217;ten nas\u0131l geri y\u00fckleyece\u011finizi g\u00f6sterdik.<\/p>\n<p>Unutmay\u0131n ki yedekleme, sadece veriyi bir yere kopyalamakla bitmez; ayn\u0131 zamanda bu yedeklerin d\u00fczenli olarak test edilmesi ve geri y\u00fcklenebilirli\u011finin do\u011frulanmas\u0131 da ayn\u0131 derecede \u00f6nemlidir. Bu rehberdeki ad\u0131mlar\u0131 takip ederek, de\u011ferli Git depolar\u0131n\u0131z\u0131 DigitalOcean Spaces \u00fczerinde g\u00fcvenli bir \u015fekilde yedekleyebilir, potansiyel veri kay\u0131plar\u0131na kar\u015f\u0131 kendinizi koruyabilir ve projelerinizin s\u00fcreklili\u011fini sa\u011flayabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Git Deponuzu DigitalOcean Spaces&#8217;e Yedekleme Rehberi\nGiri\u015f\nModern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin kalbinde yer alan Git, projelerinizi versiyon","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-35690","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Git Deponuzu DigitalOcean Spaces&#039;e Yedekleme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git Deponuzu DigitalOcean Spaces&#039;e Yedekleme Rehberi\" \/>\n<meta property=\"og:description\" content=\"Git Deponuzu DigitalOcean Spaces&#039;e Yedekleme Rehberi Giri\u015f Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin kalbinde yer alan Git, projelerinizi versiyon\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-02T16:41:03+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Git Deponuzu DigitalOcean Spaces&#8217;e Yedekleme Rehberi\",\"datePublished\":\"2025-12-02T16:41:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/\"},\"wordCount\":4051,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/\",\"name\":\"Git Deponuzu DigitalOcean Spaces'e Yedekleme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-02T16:41:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git Deponuzu DigitalOcean Spaces&#8217;e Yedekleme Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Git Deponuzu DigitalOcean Spaces'e Yedekleme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Git Deponuzu DigitalOcean Spaces'e Yedekleme Rehberi","og_description":"Git Deponuzu DigitalOcean Spaces'e Yedekleme Rehberi Giri\u015f Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin kalbinde yer alan Git, projelerinizi versiyon","og_url":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-02T16:41:03+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Git Deponuzu DigitalOcean Spaces&#8217;e Yedekleme Rehberi","datePublished":"2025-12-02T16:41:03+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/"},"wordCount":4051,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/","name":"Git Deponuzu DigitalOcean Spaces'e Yedekleme Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-02T16:41:03+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/git-deponuzu-digitalocean-spacese-yedekleme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Git Deponuzu DigitalOcean Spaces&#8217;e Yedekleme Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35690"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35690\/revisions"}],"predecessor-version":[{"id":35691,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35690\/revisions\/35691"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}