7

クローンしたローカルリポジトリがありますgit clone --mirror <ssh-url>。その後、を使用して最新の状態に保ちますgit remote update --prune

この時点でHEADrefs/heads/master

次に、github リポジトリの Admin セクションに移動し、デフォルト ブランチを変更します。すべてのブランチは通常どおり更新されますが、HEAD はまだ更新されていますrefs/heads/master(はい、ブランチのハッシュは異なります)。

私の現在の考えはgit ls-remote、HEAD とすべてのブランチのハッシュを取得するために使用し、grep/awk マジックを使用して HEAD のハッシュを抽出し、一致するハッシュを持つ最初のブランチを選択し、使用git symbolic-ref HEAD <found branch name>してローカルに設定することです。

HEADしかし、(スクリプトで更新できる方法で)リモート ブランチ名を取得する簡単な方法はありますか?

4

4 に答える 4

2

はい、これには次のコマンドがあります。

git remote set-head origin -a

からgit help remote:

-a を指定すると、リモートが照会されてその HEAD が決定され、symbolic-ref refs/remotes/<name>/HEAD が同じブランチに設定されます。たとえば、リモート HEAD が next を指している場合、「git remote set-head origin -a」は、シンボリック参照 refs/remotes/origin/HEAD を refs/remotes/origin/next に設定します。これは、refs/remotes/origin/next が既に存在する場合にのみ機能します。そうでない場合は、最初に取得する必要があります。

于 2013-03-07T08:37:02.870 に答える
-1

リモート HEAD を照会するには、次を使用します。

git remote show origin
* remote origin
  Fetch URL: git://...
  Push  URL: git://...
  HEAD branch: whateverremotehead
  Remote branches:
    ...

「HEADブランチ」を探して出力を解析し、それを使用します

git symbolic-ref HEAD refs/heads/whateverremotehead

私はより良い方法を知りません。

于 2014-08-03T14:26:20.160 に答える
-1

ssh を使用しているため、適切な ssh アクセスがあれば、次のコマンドを使用できます。

scp yourusername@yourserver:/path/to/the/server/repo/HEAD local/repo/.git/HEAD
于 2013-03-07T18:50:49.837 に答える