Gitは既存のリポジトリを新しい別のリモートリポジトリサーバーにプッシュしますか?


494

git.fedorahosted.orgにリポジトリがあり、これをgithubの自分のアカウントに複製して、fedorahostedのより「公式な」リポジトリとは別に自分の遊び場を作りたいとします。最初にそれをコピーする手順は何ですか?github内にこの「フォーク」ボタンがありますが、明らかな理由でこれを使用できません。

そして、どうすればfedorahostedリポジトリの変更をgithubリポジトリに追跡できますか?

回答:


751
  1. githubで新しいリポジトリを作成します。
  2. fedorahostedからローカルマシンにリポジトリのクローンを作成します。
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

これで、他のgithubリポジトリと同じように作業できます。上流からパッチを取り込むには、単にを実行しgit pull upstream master && git push origin masterます。


14
元のオリジンの名前を変更する理由はありません。新しい遊び場を別の名前にしてください。
tacaswell 2013

34
@tcaswell技術的にはありませんがorigin、標準的なリモートの場所を指す強力な規則です。この場合、githubの場所はおそらく正規のものになります。
troelskn 2013

1
私は「上流」を標準的な場所と考えますが、これは髪を分割し始めていると思います。
tacaswell 2013

3
たぶん私は別の質問を投稿する必要がありますが、皆さんは私が何を望んでいるかについて議論していると思います。既存のリポジトリを置き換えるのではなく、新しいリモートを追加したいので、古いリポジトリから引き続きプルし、変更を新しいリポジトリにプッシュできます。
ThatAintWorking 2014

13
@ThatAintWorking新しい質問を開く必要がありますが、簡単に言うと、コマンドを使用して任意の数のリモートを追加できますgit remote add。次に、でリモートを明示的に指定することにより、それらのいずれかにプッシュできgit pushます。たとえばgit push foobar master、現在のブランチをmasterリモートにプッシュしfoobarます。
troelskn 2014

108

この質問に役立つリンクがあった削除された回答がありますhttps : //help.github.com/articles/duplicating-a-repository

要点は

0. create the new empty repository (say, on github)
1. make a bare clone of the repository in some temporary location
2. change to the temporary location
3. perform a mirror-push to the new repository
4. change to another location and delete the temporary location

OPの例:

ローカルマシン

$ cd $HOME
$ git clone --bare https://git.fedorahosted.org/the/path/to/my_repo.git
$ cd my_repo.git
$ git push --mirror https://github.com/my_username/my_repo.git
$ cd ..
$ rm -rf my_repo.git

5
ベアクローンとミラープッシュの利点は、単に追加して別のリモートにプッシュするだけですか?現在のブランチだけでなく、すべてのブランチがプッシュされるのですか?(もしそうなら、これは認められた回答の制限のように思われることに注意してください。)
yoyo

3
これはまさに私が探していた情報でした-通常--bare / --mirrorは人々が実行したいものです!これは重要な答えです!ありがとう
claf

1
すごい!トピックの質問に対する間違いなく最も正しい答え。ありがとう!私がこのようにしない場合、私は常に得るerror: failed to push some refs to 'https://github.com/username/testrep.git'
デニスババリーキン'29

45

既存のリポジトリを別のリポジトリにプッシュするには、次のことを行う必要があります。

  1. 最初に元のリポジトリのクローンを作成します。

    git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
    
  2. 複製したソースを新しいリポジトリにプッシュします。

    cd rhq
    git push https://github.com/user/example master:master
    

あなたは、変更される可能性master:mastersource:destinationの分岐。


特定のコミット(ブランチ)をプッシュする場合は、次のようにします。

  1. 元のリポジトリで、新しいブランチを作成してチェックアウトします。

    git checkout -b new_branch
    
  2. を選択して、開始するポイントにリセットします。

    git log # Find the interesting hash
    git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
    

    または、コミットを選択して、git cherry-pick既存のHEADに追加します。

  3. 次に、新しいリポジトリにプッシュします。

    git push https://github.com/user/example new_branch:master
    

    リベースする場合は-f、強制プッシュに使用します(非推奨)。実行git reflogすると、変更の履歴が表示されます。


2
これgit push ... old_branch_name:new_branch_nameにより、古いリポジトリの機能ブランチを新しいリポジトリのメインブランチとしてプッシュできます。便利!
gorjanz

これは私がそれを行う最も簡単な方法でした。
アダム

15

ローカルリポジトリ(ローカルブランチなど)を新しいリモートにプッシュするだけですか、それとも古いリモート(すべてのブランチ、タグなど)を新しいリモートにミラ​​ーリングしますか?後者の場合は、gitリポジトリを適切にミラーリングする方法に関する素晴らしいブログをご覧ください。

いくつかの非常に重要な詳細についてブログを読むことを強くお勧めしますが、短いバージョンはこれです:

新しいディレクトリで次のコマンドを実行します。

git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git

私はこれがリンクだと思う:blog.plataformatec.com.br/2013/05/...
デヴィッド・

11

これを試すGitリポジトリ全体を移動する方法

  1. 次を使用してtemp-dirディレクトリにローカルリポジトリを作成します。

    git clone temp-dir

  2. temp-dirディレクトリに移動します。

  3. ORIのさまざまなブランチのリストを表示するには、次のようにします。

    git branch -a
    
  4. 以下を使用して、ORIからNEWにコピーするすべてのブランチをチェックアウトします。

    git checkout branch-name
    
  5. ここで、ORIからすべてのタグをフェッチします。

    git fetch --tags
    
  6. 次の手順を実行する前に、次のコマンドを使用してローカルタグとブランチを確認してください。

    git tag
    
    
    git branch -a
    
  7. 次のコマンドを使用して、ORIリポジトリへのリンクをクリアします。

    git remote rm origin
    
  8. 次のコマンドを使用して、ローカルリポジトリを新しく作成したNEWリポジトリにリンクします。

    git remote add origin <url to NEW repo>
    
  9. 次のコマンドですべてのブランチとタグをプッシュします。

    git push origin --all
    
    
    git push --tags
    
  10. これで、ORIリポジトリから完全なコピーが作成されました。


9

簡潔でかなり理解しやすいset-urlを使用した解決策を見つけました:

  1. Githubで新しいリポジトリを作成する
  2. cd ローカルマシンの既存のリポジトリに(まだそれをクローンしていない場合は、最初にこれを実行します)
  3. git remote set-url origin https://github.com/user/example.git
  4. git push -u origin master

9

既存のGitリポジトリがある場合:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/newproject
git push -u origin --all
git push -u origin --tags

1
明確にするために、
GilCol

7

次のコマンドでGITリポジトリのURLを変更して、新しいリポジトリを指定するだけです。

git remote set-url origin [new repo URL]

例: git remote set-url origin git@bitbucket.org:Batman/batmanRepoName.git

これで、プッシュとプルが新しいREPOにリンクされました。

次に、通常のようにプッシュします。

git push -u origin master

2

私も同じ問題を抱えていました。

私の場合、ローカルマシンに元のリポジトリがあるため、非表示のファイル(.git、.gitignore)なしで新しいフォルダーにコピーを作成しました。

最後に、新しく作成したフォルダーに.gitignoreファイルを追加しました。

次に、ローカルパスから新しいリポジトリを作成して追加しました(私の場合はGitHub Desktopを使用しています)。


1

ここに手動で行う方法がありますgit remote set-url origin [new repo URL]

  1. リポジトリのクローンを作成します。 git clone <old remote>
  2. GitHubリポジトリを作成する
  3. 開いた <repository>/.git/config

    $ git config -e
    
    [core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
    [remote "origin"]
        url = <old remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    

    リモートを変更する(urlオプション)

    [remote "origin"]
        url = <new remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    
  4. リポジトリをGitHubにプッシュします。 git push

両方/ 複数のリモコンを使用することもできます。


私は同じ問題を探していて、同じことをしてうまくいきました。
Mohit Patidar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.