git clone

Page content

GitHubでリポジトリのZIPファイルをPCにダウンロードした場合、それは単なるスナップショット(特定の時点のファイル群)であり、Gitの履歴情報やリモートとの連携情報が失われています。したがって、ダウンロードしたZIPファイルから直接Gitリポジトリとして連携させることはできません。

この場合、「Gitリポジトリをダウンロード」ではなく、「Gitリポジトリをクローン」するというアプローチを取る必要があります。クローンすることで、Gitの全ての履歴とリモートへの参照が設定された状態でローカルにリポジトリが作成されます。

しかし、もしどうしてもZIPファイルでダウンロードしたファイル群から作業を始めたいのであれば、以下の手順でリモートリポジトリと連携させることができます。


シナリオ1: GitHubリポジトリをまだクローンしていない場合 (推奨アプローチ)

これが最も推奨される方法です。ZIPファイルをダウンロードして作業するのではなく、最初からgit cloneを使用します。

  1. ZIPファイルを削除する(または別の場所に移動する): ZIPファイルでダウンロードしたディレクトリは不要になります。

  2. GitHubリポジトリのURLを取得する: GitHubのリポジトリページに行き、「Code」ボタンをクリックして、HTTPSまたはSSHのURLをコピーします。

    • HTTPS: https://github.com/your-username/your-repo.git
    • SSH: git@github.com:your-username/your-repo.git (SSHキーを設定済みの場合)
  3. コマンドラインでリポジトリをクローンする: 作業したいディレクトリに移動し、以下のコマンドを実行します。

    git clone <リポジトリのURL>
    

    例:

    git clone https://github.com/techentrelab/hugo.git
    

    これにより、hugo という名前のディレクトリが作成され、その中にリポジトリの全てのファイルとGitの履歴、そしてoriginという名前のリモート設定が自動的に行われます。

  4. 作成されたディレクトリに移動して作業を開始する:

    cd hugo
    

これで、ローカルリポジトリがリモートのGitHubリポジトリと完全に連携された状態になります。git pullgit push がすぐに利用可能です。


シナリオ2: ZIPファイルでダウンロードしたファイル群から作業を始めたい場合 (非推奨だが、手順は以下)

この方法は、Gitの履歴をすべて破棄し、新しいリポジトリとして「再出発」するような形になります。既存のリモートリポジトリにコミットをプッシュしたい場合は、さらに複雑な手順が必要になる場合があります。

前提: ZIPファイルを展開したディレクトリ(例: hugo)があり、その中にリポジトリのファイル群が入っているとします。

  1. 展開したディレクトリに移動する:

    cd /path/to/your/unzipped/hugo
    
  2. 新しいGitリポジトリを初期化する: これにより、現在のディレクトリが新しいGitリポジトリとして認識されます。

    git init
    
  3. 全てのファイルをステージングする: ダウンロードしたファイル群を、新しいリポジトリの最初のコミットとして準備します。

    git add .
    
  4. 最初のコミットを作成する:

    git commit -m "Initial commit from downloaded zip"
    
  5. GitHubリポジトリのURLを取得する: シナリオ1と同じように、GitHubのリポジトリページからURLをコピーします。

  6. リモートリポジトリを追加する: origin という名前でGitHubリポジトリのURLを追加します。

    git remote add origin <GitHubリポジトリのURL>
    

    例:

    git remote add origin https://github.com/techentrelab/hugo.git
    
  7. リモートブランチの変更をプルする (重要) ここで、現在のローカルリポジトリはリモートの履歴を全く持っていません。リモートの履歴とローカルの変更を統合する必要があります。通常、安全策として、リモートの履歴を一度ローカルにプルし、それを現在の作業と統合します。

    git pull origin main --allow-unrelated-histories
    
    • origin main: origin リモートの main ブランチからプルします。(ブランチ名は適宜 master などに変更してください)
    • --allow-unrelated-histories: ローカルリポジトリとリモートリポジトリの履歴が全く関係ない場合に、マージを許可するためのオプションです。これを付けないと、エラーでプルできません。

    このコマンドを実行すると、リモートの変更が現在のローカルブランチにマージされます。競合(コンフリクト)が発生した場合は、手動で解決する必要があります。

  8. 変更をプッシュする: もし競合を解決し、リモートの変更と統合されたローカルの変更をGitHubに反映させたい場合は、プッシュします。

    git push -u origin main
    
    • -u origin main: ローカルの main ブランチを originmain ブランチにプッシュし、今後のために追跡関係を設定します。

どちらのアプローチを選ぶべきか?

  • シナリオ1 (git clone) を強く推奨します。これは、Gitの設計思想に合致しており、リポジトリの完全な履歴、ブランチ情報、リモート設定を全て含んだ状態でローカルに作業環境を構築できます。
  • シナリオ2 (ZIPから始める) は、ダウンロードしたファイル群が既存のGitHubリポジトリの最新版である場合でも、ローカルとリモートの履歴を統合する際に--allow-unrelated-historiesが必要になるなど、少し複雑な手順を踏む必要があります。また、リモートに既存のコミットがある場合、これらのコミットとあなたの最初のコミットの間にマージコミットが作成されます。

通常、GitHubからファイルを取得してGitで作業を開始したい場合は、常に git clone を使用してください。