2017-02-15 6 views
0

私はgitリポジトリの浅いクローンで作業しています。浅いクローンは.git/configファイル内のリモートトラッキングブランチを1つだけリストするので、新しいリモートブランチを取得するには、明示的に追加する必要があります。私は枝浅いクローンのブランチを削除する

git checkout master 
git branch --delete <branch-name> 

を削除し、リモート

git push --delete origin <branch-name> 

に削除を押した場合の例その後

git clone --depth 1 <remote-url> 
git remote set-branches --add origin <branch-name> 
git fetch --depth 1 origin <branch-name> 
git checkout <branch-name> 

のために私は問題を抱えています。私はpullまたはfetch私は

致命的なエラーメッセージが出た場合:>

がとても不足している、私は削除しない方法git remote set-branches --addに該当する--removeオプションはありませんリモートREF <支店名が見つかりませんでしたブランチ?それは

fetch = +refs/heads/<branch-name>:refs/remotes/origin/<branch-name> 

またはそれを行うにはあまり隠された方法がある行を削除するには.git/configファイルを編集するということですか?私はブランチの削除を押してもフェッチ行が削除されないことに驚いています。

+0

私は正確な状況を再現することができませんので、わかりません...しかし 'git branch --unset-upstream 'は動作しますか? –

+0

悲しいことに、 - 致命的だと報告しました:「には上流情報がありません。私は削除の前にそれを試してみましょう、それが助けるかどうかを確認してください – dumbledad

+0

ええ、私は最終的に元のエラーを再現しました(私が逃したステップを見つけました)。私はちょっと遊んで、私が見つけたものを知らせます。 –

答えて

1

オプション1:問題を回避しますか?

gitにどの分岐をフェッチするかを明示的に指示しないと、この問題は回避できます。 (しかし、あなたはオプション2にスキップおそらく良く、枝の唯一の選択されたセットをフェッチする必要がある場合)あなたはクローンを作成するとき、あなたはすべてのブランチ

git clone --depth=1 --no-single-branch ... 

それとも、既にクローニングとする場合が欲しいと言うことができます枝の残りの部分を取得:あなたの指示から、特定のブランチを探すためにフェッチを構成している代わりに

git remote set-branches --add origin <branch-name> 

、あなたは可能性があり

git config --unset remote.origin.fetch 
git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* 
git fetch --depth=1 

(ローカルおよびリモートブランチを削除しますly)はもはや問題を引き起こさない。

(あなたはより多くの選択パターンを使用することができるかもしれませんが、あなたは「すべて」をしたくない場合には、個々の枝を選択し、選択することに賭けることができる。)

あなたはすでにリポジトリを持っている場合上記のようにいくつかのブランチを追加しました。設定したコマンドに似たconfigコマンドを "修復"する必要があります。 (。ただ、最初のコマンドで--unset-all--unsetを置き換える)

オプション2:

問題を修正しました。しかし、あなたが個々の枝を一覧表示するには、あなたの設定を必要とするならば、あなたはこれらのいずれかの方法で削除を処理することができます:

git configを使用すると、手動でファイルを編集することなく直接設定を削除できます。

git config --unset remote.origin.fetch <branch-name> 

<branch-name>を正規表現として解釈されることに注意してください、そして、それは複数の値と一致する場合、それは動作しません。明示的なgit remote set-branches --removeまたはその何かがそこにはありませんが

:あなたは、複数のマッチング値についての警告を受けるのであれば、あなたは

git config --unset remote.origin.fetch origin.<branch-name>$ 

それともgit remote set-branchesを使用することができるような何かをする必要があると思いますソートの場合、set-branches--addフラグなしで使用すると、リモートブランチのリストを完全にリセットできます。余りにも多くの支店がなければ、これはうまくいくでしょう。たとえば、あなたが

git remote set-branches origin master 

を行うことができ、上記に示されているもののみ与えられた。しかし、あなたが他の枝の束を追加した場合、あなたはあまりにもそれらを一覧表示したり、それらを失うする必要があると思います。支店のいずれかがない場合は、原点を追跡するためのもの、実際には、

git remote set-branches origin master branch1 branch2 branch3 ... 

あなたはブランチリスト

git branch | sed s/'\* '// | xargs git remote set-branches origin 

を得るためのプロセスを自動化することができしかし、それは問題を持っているでしょう。

+0

ブランチのリストを作成する必要があるので、私はこれが気に入らない。 .git/configファイルを編集するよりも難しくなります* – dumbledad

+0

「簡単」という意味に依存します。磁器をバイパスして手動でファイルを編集する場合は、手順が少なくなることがあります。一方、磁器はあなたのレポを(一般的に)腐敗から守ります。だからあなたが好きでないなら、それを使わないでください。私はより良いものを探していると言いました。しかし、ブランチリストを作成することはそれほど難しいことではない - ちょっと面倒なことかもしれない。それにかかわらず、あなたはそれを行う隠されていない方法について尋ねました。これまでのところ、それは1つです。 –

+0

'git branch'の結果を得て、' git remote set-branches'に連結するbash1ライナーを書くこともできました。それが不正行為であるかどうかは分かりませんが、うまくいくかもしれません。 – dumbledad

関連する問題