# 次のステップ

次のセクションでは、Hugging Face Hub上のGitリポジトリを最大限に活用するために役立つ機能や追加情報を紹介します。

## リポジトリをプログラムで管理する方法

Hugging Face は、[`huggingface_hub` ライブラリ](https://huggingface.co/docs/huggingface_hub/index) を通じた Python でのリポジトリへのアクセスをサポートしています。リポジトリのダウンロードやファイルのアップロードなど、これまで見てきた操作は、このライブラリを通じて利用可能であり、他にも便利な機能が用意されています。

gitを直接使用する場合は、以下のセクションをお読みください。

## Gitについてさらに詳しく

Gitの学習を続けたい場合、[このGitチュートリアル](https://learngitbranching.js.org/)がおすすめです。Gitに関するより詳しい背景知識を得たい場合は、[GitHubのGitガイド](https://github.com/git-guides)をご覧ください。

## ブランチの使用方法

Git リポジトリを効果的に共同利用し、未完成のコードを公開せずに機能の開発を進めるには、**ブランチ**を使用できます。ブランチを使用すると、「作業中」のコードと「本番環境で利用可能」なコードを分離でき、さらに複数の人がプロジェクトに貢献しても、頻繁に競合が発生しにくいという利点もあります。ブランチを使用して実験を独自のブランチに分離したり、[ブランチ管理のためのチーム全体の慣行を採用](https://ericmjl.github.io/essays-on-data-science/workflow/gitflow/)したりすることもできます。

Gitのブランチについて学ぶには、[Learn Git Branching インタラクティブチュートリアル](https://learngitbranching.js.org/)を試すことができます。

## タグの使用

Gitでは、コミットに*タグ*を付けることで、プロジェクトのマイルストーンを簡単に記録できます。同様に、Hubのリポジトリ内のコミットにタグを付けることもできます。タグの使い方については、[このDevConnectedの投稿](https://devconnected.com/how-to-create-git-tags/)をご覧ください。

リポジトリの履歴から重要なコミットを特定しやすくなるだけでなく、Git タグを使用することで A/B テストの実行や、[特定のタグでリポジトリをクローンする](https://www.techiedelight.com/clone-specific-tag-with-git/)ことも可能になります。`huggingface_hub` ライブラリもタグでの操作をサポートしており、[特定のタグ付きコミットからファイルをダウンロードする](https://huggingface.co/docs/huggingface_hub/main/en/how-to-downstream#hfhuburl)こともできます。

## リポジトリの複製方法

Gitの履歴を保持する必要があるかどうかによって、リポジトリを複製する方法はいくつかあります。

### Hubからの複製

リポジトリページの右上にある3点リーダーをクリックし、**このモデルを複製**、**このデータセットを複製**、または**このSpaceを複製**を選択します。[Xetの重複排除技術](./xet/deduplication)を使用しているため、この操作はほぼ瞬時に完了します。以下の項目を選択できます:

* **オーナー**: 書き込みアクセス権限を持つあなたのアカウントまたは組織。
* **リポジトリ名**: 複製されるリポジトリの名前です。デフォルトでは、ソースと同じ名前が、あなたのネームスペースの下に保持されます（例: `bigscience/bloom-560m` を複製すると、`your-username/bloom-560m` が作成されます）。
* **公開範囲**: 複製したリポジトリを公開または非公開に設定できます。プライベートリポジトリの詳細については、[こちら](./repositories-settings#private-repositories)をご覧ください。

モデルとデータセットの場合、Git の履歴は単一のコミットにまとめられます。Spaces の場合、Git の履歴全体が保持されます。Spaces については、公開変数がコピーされますが、シークレットは手動で再入力する必要があります。

#### 制限事項

一部のリポジトリは複製できません:
- **ゲート付きリポジトリ**（アクセスリクエストが有効化されているモデルまたはデータセット）。
- 作成者が**重複の無効化**を設定したリポジトリ。
- **リージョン間での複製**はサポートされていません（例：USリージョンに保存されているリポジトリをEUの組織に複製することはできません）。

### プログラムによる複製

`huggingface_hub` ライブラリまたは CLI を使用してリポジトリを複製することもできます。これらは、上記の Hub ボタンと同じサーバーサイド API を使用します（モデルとデータセットでは Git の履歴がフラット化され、Spaces では保持されます）。

Python を使用する場合:

```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)
```

または、CLIを使用します:

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

Spaces については、ご自身で設定（ハードウェア、スリープ時間、ストレージ、変数とシークレット）を行う必要があります。詳細については、[Space の管理](https://huggingface.co/docs/huggingface_hub/guides/manage-spaces)ガイドを参照してください。

代わりに、リポジトリのローカルコピーを保持したい場合は、`hf download` を使用してダウンロードし、その後 `hf upload` を使用して別のネームスペースにアップロードできます。この方法でも Git の履歴は保持されません。

### Git を使用して手動でフォークする

モデル/データセットのGit履歴を保持する必要がある場合、またはプロセスをより詳細に制御したい場合（例: 独自の変更の上にrebaseする）には、Gitを使用してリポジトリを手動でフォークできます。

[`git-xet`](https://huggingface.co/docs/hub/xet/using-xet-storage#git) のインストールが必要です。LFS ファイルをすべて取得して再アップロードする必要があるため、帯域幅によってはフォークに時間がかかる場合があります（ただし、Xet により再アップロードは高速に行われます）。

1. https://huggingface.co にデスティネーションリポジトリ（例: `me/myfork`）を作成します

2. クローンし、ソースのリポジトリをリモートとして追加します:

```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. フォークの内容をアップストリームの履歴に置き換えます:

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

4. プッシュ:

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

