14

gitolite リポジトリに新しいリポジトリを作成するときは、コードをサーバーにプッシュする前に、常に次のコマンドを入力する必要があります。

git push origin master:refs/heads/master

それは何をするためのものか ?

私の推測では、それは不明なヘッド参照に関係しているということです。誰かが私にそれを説明できますか?

4

4 に答える 4

29

このコマンドには3つの部分があります。

git push

これにより、プッシュコマンドが呼び出されます

origin

これは、プッシュ先のリモートに名前を付けます。これは、.git / configに保存されている名前付きリモートの1つ(これらはでリストできますgit remote)、URL、または.現在のリポジトリを意味するトークンのいずれかです。

master:refs/heads/master

これは「refspec」と呼ばれ、のマニュアルページで読むことができますgit push。しかし、一般的には、コロンで区切られた2つの部分で構成されます。最初の部分はローカルブランチの名前であり、2番目の部分はリモートリポジトリ(この場合origin)のブランチの名前です。この特定のrefspecは、に短縮できますmaster:master

一般に、refspecをさらに短くすることができます。refspecとして指定するだけmasterで、リモートで同じ名前を使用するのと同じであるためmaster、と同じmaster:masterです。

于 2011-09-21T21:30:07.847 に答える
5

master:refs/heads/masterrefspecです。

refspecsの形式です+<src>:<dst>

したがって、ここでマスターはrefs/heads/master、リモート(オリジン)のrefspecにプッシュしているローカルリポジトリのrefです。実際にmasterはの略です。refs/heads/master

git push origin master実際、ローカルのマスターをリモートのマスターにプッシュするだけで実行できます。別の参照にプッシュする場合にのみ、宛先参照を明示的に指定する必要があります。

また git push、デフォルトの動作もあります。これは、最初のプッシュを実行してリモートにブランチ(マスター)を作成する前はおそらくそうではなかったでしょう。したがって、あなたが言及したコマンドを実行する必要があるように見えたでしょう。マニュアルを参照してください

于 2011-09-21T21:30:10.403 に答える
3

のデフォルトの動作はgit push、おそらく「コードをサーバーにプッシュする」と表現するものであり、プッシュ先のリモートで、名前によって一致するブランチを持つローカルブランチのみをプッシュすることです。新しいリポジトリを作成すると、ブランチが含まれないため、単純なものでgit pushは何もプッシュされません。最初に名前でブランチを明示的にプッシュする必要があります。その後、デフォルトの動作は期待どおりに機能します。

PS実際には、あなたはただする必要がありますgit push origin master。別の名前を指定しなかったため、ローカルマスターをマスターとしてgitoliteリポジトリにプッシュします。あなたが言った場合git push origin master:foo、あなたがローカルで「マスター」と呼ぶブランチは、gitoliteでは「foo」として知られています。

PPSデフォルトのプッシュ動作は、「nothing」、「matching」(デフォルト)、「trackings」/「upstream」、および「current」の間で切り替えることができます。git-configのマニュアルページで「push.default」の設定を参照してください。

于 2011-09-21T21:29:45.913 に答える
1

それはあなたのために追跡を設定します。これには省略形を使用できます。

git push origin master

コロンの後の部分は、リモートリポジトリのブランチの名前です。省略した場合、gitは同じ名前が必要であると想定します。

お役に立てれば。

于 2011-09-21T21:29:10.797 に答える