git.fedorahosted.orgにリポジトリがあり、これをgithubの自分のアカウントに複製して、fedorahostedのより「公式な」リポジトリとは別に自分の遊び場を作りたいとします。最初にそれをコピーする手順は何ですか?github内にこの「フォーク」ボタンがありますが、明らかな理由でこれを使用できません。
そして、どうすればfedorahostedリポジトリの変更をgithubリポジトリに追跡できますか?
git.fedorahosted.orgにリポジトリがあり、これをgithubの自分のアカウントに複製して、fedorahostedのより「公式な」リポジトリとは別に自分の遊び場を作りたいとします。最初にそれをコピーする手順は何ですか?github内にこの「フォーク」ボタンがありますが、明らかな理由でこれを使用できません。
そして、どうすればfedorahostedリポジトリの変更をgithubリポジトリに追跡できますか?
回答:
git remote rename origin upstream
git remote add origin URL_TO_GITHUB_REPO
git push origin master
これで、他のgithubリポジトリと同じように作業できます。上流からパッチを取り込むには、単にを実行しgit pull upstream master && git push origin master
ます。
origin
、標準的なリモートの場所を指す強力な規則です。この場合、githubの場所はおそらく正規のものになります。
git remote add
。次に、でリモートを明示的に指定することにより、それらのいずれかにプッシュできgit push
ます。たとえばgit push foobar master
、現在のブランチをmaster
リモートにプッシュしfoobar
ます。
この質問に役立つリンクがあった削除された回答があります: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
error: failed to push some refs to 'https://github.com/username/testrep.git'
既存のリポジトリを別のリポジトリにプッシュするには、次のことを行う必要があります。
最初に元のリポジトリのクローンを作成します。
git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
複製したソースを新しいリポジトリにプッシュします。
cd rhq
git push https://github.com/user/example master:master
あなたは、変更される可能性master:master
へsource:destination
の分岐。
特定のコミット(ブランチ)をプッシュする場合は、次のようにします。
元のリポジトリで、新しいブランチを作成してチェックアウトします。
git checkout -b new_branch
を選択して、開始するポイントにリセットします。
git log # Find the interesting hash
git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
または、コミットを選択して、git cherry-pick
既存のHEADに追加します。
次に、新しいリポジトリにプッシュします。
git push https://github.com/user/example new_branch:master
リベースする場合は-f
、強制プッシュに使用します(非推奨)。実行git reflog
すると、変更の履歴が表示されます。
git push ... old_branch_name:new_branch_name
により、古いリポジトリの機能ブランチを新しいリポジトリのメインブランチとしてプッシュできます。便利!
ローカルリポジトリ(ローカルブランチなど)を新しいリモートにプッシュするだけですか、それとも古いリモート(すべてのブランチ、タグなど)を新しいリモートにミラーリングしますか?後者の場合は、gitリポジトリを適切にミラーリングする方法に関する素晴らしいブログをご覧ください。
いくつかの非常に重要な詳細についてブログを読むことを強くお勧めしますが、短いバージョンはこれです:
新しいディレクトリで次のコマンドを実行します。
git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git
これを試すGitリポジトリ全体を移動する方法
次を使用してtemp-dirディレクトリにローカルリポジトリを作成します。
git clone temp-dir
temp-dirディレクトリに移動します。
ORIのさまざまなブランチのリストを表示するには、次のようにします。
git branch -a
以下を使用して、ORIからNEWにコピーするすべてのブランチをチェックアウトします。
git checkout branch-name
ここで、ORIからすべてのタグをフェッチします。
git fetch --tags
次の手順を実行する前に、次のコマンドを使用してローカルタグとブランチを確認してください。
git tag
git branch -a
次のコマンドを使用して、ORIリポジトリへのリンクをクリアします。
git remote rm origin
次のコマンドを使用して、ローカルリポジトリを新しく作成したNEWリポジトリにリンクします。
git remote add origin <url to NEW repo>
次のコマンドですべてのブランチとタグをプッシュします。
git push origin --all
git push --tags
これで、ORIリポジトリから完全なコピーが作成されました。
簡潔でかなり理解しやすいset-urlを使用した解決策を見つけました:
cd
ローカルマシンの既存のリポジトリに(まだそれをクローンしていない場合は、最初にこれを実行します)git remote set-url origin https://github.com/user/example.git
git push -u origin master
既存の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
次のコマンドで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
ここに手動で行う方法がありますgit remote set-url origin [new repo URL]
:
git clone <old remote>
開いた <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/*
リポジトリをGitHubにプッシュします。 git push
両方/ 複数のリモコンを使用することもできます。