# Sonraki Adımlar

Bu sonraki bölümler, Hugging Face Hub'daki Git depolarından en iyi şekilde yararlanmanıza yardımcı olabilecek özellikleri ve ek bilgileri vurgular.

## Depoları programatik olarak nasıl yönetilir

Hugging Face, [`huggingface_hub` kütüphanesi](https://huggingface.co/docs/huggingface_hub/index) aracılığıyla Python üzerinden depolara erişimi destekler. İndirme ve dosya yükleme gibi incelediğimiz işlemler, kütüphane üzerinden erişilebilir olan diğer faydalı işlevlerle birlikte kullanılabilir.

Eğer git'i doğrudan kullanmayı tercih ediyorsanız, lütfen aşağıdaki bölümleri okuyun.

## Git hakkında daha fazla bilgi edinme

Git hakkında öğrenmeye devam etmek istiyorsanız ziyaret edebileceğiniz iyi bir yer [bu Git öğreticisidir](https://learngitbranching.js.org/). Git hakkında daha fazla arka plan bilgisi için [GitHub'ın Git Kılavuzları](https://github.com/git-guides)'na göz atabilirsiniz.

## Dalların nasıl kullanılacağı

Git depolarını iş birliği içinde etkili bir şekilde kullanmak ve erken aşamada kod yayınlamadan özellikler üzerinde çalışmak için **branch** (dal) kullanabilirsiniz. Branch'ler, "devam eden iş" kodunuzu "üretim için hazır" kodunuzdan ayırmanıza olanak tanır; bunun yanı sıra, birden fazla kişinin bir proje üzerinde çalışırken birbirlerinin katkılarıyla sık sık çelişmeden ilerlemesini sağlar. Deneylerinizi kendi branch'lerinde izole etmek ve hatta [branch'leri yönetmek için ekip genelinde geçerli uygulamaları benimsemek](https://ericmjl.github.io/essays-on-data-science/workflow/gitflow/) için branch'leri kullanabilirsiniz.

Git dallanma hakkında bilgi edinmek için [Learn Git Branching etkileşimli öğreticisini](https://learngitbranching.js.org/) deneyebilirsiniz.

## Etiketleri kullanma

Git, projenizdeki kilometre taşlarını kolayca not alabilmeniz için commit'leri *etiketlemenize* olanak tanır. Bu nedenle, Hub depolarınızdaki commit'leri işaretlemek için etiketleri kullanabilirsiniz. Etiketlerin kullanımını öğrenmek için [bu DevConnected gönderisine](https://devconnected.com/how-to-create-git-tags/) göz atabilirsiniz.

Deponuzun geçmişindeki önemli commit'leri belirlemeyi kolaylaştırmanın ötesinde, Git etiketlerini kullanmak A/B testleri yapmanıza, [belirli bir etiketteki bir depoyu klonlamanıza](https://www.techiedelight.com/clone-specific-tag-with-git/) ve daha fazlasına olanak tanır. `huggingface_hub` kütüphanesi de etiketlerle çalışmayı destekler; örneğin [belirli bir etiketli commit'ten dosya indirme](https://huggingface.co/docs/huggingface_hub/main/en/how-to-downstream#hfhuburl) gibi.

## Bir repoyu nasıl çoğaltılır

Git geçmişini korumanız gerekip gerekmediğine bağlı olarak, bir depoyu çoğaltmanın birkaç yolu vardır.

### Hub'dan çoğaltma

Herhangi bir depo sayfasının sağ üst köşesindeki üç noktaya tıklayın, ardından **Bu modeli çoğalt**, **Bu veri setini çoğalt** veya **Bu Space'i çoğalt** seçeneğini seçin. [Xet yinelenme giderme teknolojisi](./xet/deduplication) sayesinde bu işlem neredeyse anında gerçekleşir. Aşağıdakilerden birini seçebilirsiniz:

* **Sahip**: Hesabınız veya yazma erişiminiz olan herhangi bir kuruluş.
* **Depo adı**: Kopyalanan deponun adı. Varsayılan olarak, kaynakla aynı adı, ad alanınız altında korur (ör. `bigscience/bloom-560m` kopyalandığında `your-username/bloom-560m` oluşturulur).
* **Görünürlük**: Kopyalanan deposunu herkese açık veya özel olarak belirleyebilirsiniz. Özel depolar hakkında daha fazla bilgi için [buraya](./repositories-settings#private-repositories) göz atın.

Modeller ve veri kümeleri için Git geçmişi tek bir commit'e sıkıştırılır. Spaces için tam Git geçmişi korunur. Spaces için genel değişkenler kopyalanır ancak gizli bilgiler (secrets) manuel olarak yeniden girilmelidir.

#### Kısıtlamalar

Bazı depolar kopyalanamaz:
- **Kapalı depolar** (erişim istekleri etkinleştirilmiş modeller veya veri kümeleri).
- Yazarın **kopyalamayı devre dışı bıraktığı** depolar.
- **Bölgeler arası kopyalama** desteklenmez (ör. ABD bölgesinde saklanan bir depo, AB'deki bir organizasyona kopyalanamaz).

### Programatik olarak çoğaltma

Ayrıca depoları `huggingface_hub` kütüphanesi veya CLI ile de çoğaltabilirsiniz. Bunlar, yukarıdaki Hub düğmesiyle aynı sunucu tarafı API'sini kullanır (modeller ve veri kümeleri için Git geçmişi sıkıştırılır, Spaces için korunur).

Python kullanılarak:

```python
from huggingface_hub import duplicate_repo

duplicate_repo("bigscience/bloom-560m", private=False)
duplicate_repo("openai/gdpval", repo_type="dataset")
duplicate_repo("multimodalart/dreambooth-training", repo_type="space", private=False)
```

Or CLI'yi kullanarak:

```bash
hf repos duplicate bigscience/bloom-560m
hf repos duplicate openai/gdpval --type dataset
```

Spaces için kendi ayarlarınızı (donanım, uyku süresi, depolama, değişkenler ve gizli anahtarlar) yapılandırmaya devam etmeniz gerekecektir. Daha fazla ayrıntı için [Space'inizi Yönetme](https://huggingface.co/docs/huggingface_hub/guides/manage-spaces) kılavuzuna göz atın.

Alternatif olarak, repoyu yerel bir kopya olarak tutmak istiyorsanız, `hf download` komutunu çalıştırıp ardından `hf upload` ile farklı bir ad alanına yükleyebilirsiniz. Bu yöntem de Git geçmişini korumaz.

### Git ile manuel fork oluşturma

Modeller/veri kümeleri için Git geçmişini korumanız gerekiyorsa veya sürecin üzerinde daha fazla kontrol sahibi olmak istiyorsanız (ör. kendi değişikliklerinizin üzerine yeniden tabanlama), bir depoyu Git kullanarak manuel olarak çatallayabilirsiniz.

[`git-xet`](https://huggingface.co/docs/hub/xet/using-xet-storage#git) kurulu olmalıdır. Bant genişliğinize bağlı olarak fork işlemi zaman alabilir çünkü tüm LFS dosyalarını alıp yeniden yüklemeniz gerekecektir (Xet sayesinde yeniden yükleme hızlı olacaktır).

1. https://huggingface.co üzerinde bir hedef depo oluşturun (ör. `me/myfork`)

2. Bunu klonlayın ve kaynak deposunu uzak (remote) olarak ekleyin:

```bash
git clone git@hf.co:me/myfork
cd myfork
git xet install
git remote add upstream git@hf.co:friend/upstream
git fetch upstream
git lfs fetch --all upstream
```

3. Fork içeriğini üst akış geçmişinin içeriğiyle değiştirin:

```bash
git reset --hard upstream/main
```

4. Yükle:

```bash
git push --force origin main
```

