2016-06-23 4 views
1
は私の設定は、この

個別のプル/プッシュURLでgitリモートどのようにプッシュ後にフェッチステップを避けるために?

[remote "upstream"] 
    url = https://github.com/theteam/foo.git 
    fetch = +refs/heads/*:refs/remotes/upstream/* 
    pushurl = https://github.com/me/foo.git 
[remote "myfork"] 
    url = https://github.com/me/foo.git 
    fetch = +refs/heads/*:refs/remotes/myfork/* 
[branch "master"] 
    remote = upstream 
    merge = refs/heads/master 

のように見えます

確かに私はtheteam/foo.gitレポにプッシュアクセス権を持っているが、私はそこに偶然のプッシュをしないように完全に特定することにしたいです。したがって、pushurlはfoo.gitが複製されている自分のアカウントを使用するように設定されています。

問題は私が行うときgit pullその後、git pushは(自分のクローンが更新される)、私はまだ他に私の地元/remote/myforkが更新されていない、git fetch myforkを必要とする、(ローカルマスターブランチは、上流レポから更新さ)ということです。 git show remote myforkは、すべてが最新であると私に伝えています。

git pushgit fetch myforkの後続の手順を回避するように設定には何が欠けていますか?

答えて

1

上流のリモートがリモーツ/ myfork refspecについて認識していないため、このようなトラッキング参照は更新できません。 (リモート/アップストリーム/マスタを更新するかどうかは不思議です)

おそらくあなたが探しているのは分岐です。 .pushRemote:

... 
[branch "master"] 
remote = upstream 
pushRemote = myfork 
... 

が正しいリモートコンテキストに

psの知っているだろうプッシュ:私には(gitの-2.0.0)の作業になります。

$ git log --oneline --decorate --no-color 
2a1baf2 (HEAD, master) r1 
4e9c27d (upstream/master, upstream/HEAD, origin/master) u2 
deb02c0 u1 
$ cat .git/config 
[core] 
     repositoryformatversion = 0 
     filemode = true 
     bare = false 
     logallrefupdates = true 
[remote "upstream"] 
     url = /home/nemo/so2/upstream 
     fetch = +refs/heads/*:refs/remotes/upstream/* 
     pushurl = ../origin/ 
[branch "master"] 
     remote = upstream 
     pushRemote = origin 
     merge = refs/heads/master 
[remote "origin"] 
     url = ../origin/ 
     fetch = +refs/heads/*:refs/remotes/origin/* 
[push] 
     default = simple 
$ git push 
Counting objects: 1, done. 
Writing objects: 100% (1/1), 170 bytes | 0 bytes/s, done. 
Total 1 (delta 0), reused 0 (delta 0) 
To ../origin/ 
    4e9c27d..2a1baf2 master -> master 
$ git log --oneline --decorate --no-color 
2a1baf2 (HEAD, origin/master, master) r1 
4e9c27d (upstream/master, upstream/HEAD) u2 
deb02c0 u1 
$ 
+0

を私は知りませんでした'pushRemote'について!残念ながら、テストでは 'push 'を動作させるために' pushRemote = https:// github.com/me/foo.git'を使用しなければならず、 'myfork/master'は更新されませんでした。 'git rev-parse'は、' git remote show myfork'はすべてが最新であると思われるようですが、これは何を出力するのか誤解しています)状況は 'pushurl'を使う場合と同じです。 – jfbu

+0

私は – max630

+0

+1と答える例を追加しましたあなたの主張に感謝します。あなたの追加した例のように私のディスク上の場所にpushRemoteを設定しようとしましたが、それはうまくいきました。それは働いた。私は最初にどのように混乱しているのか分かりません。注:私は自分の '' .git/config''を、今はリモートの "上流"に設定されたプッシュルールなしで持っています。私はちょうどリモートとしてこれを持っている私の支店もpushRemoteを持っていることを確認しています。 – jfbu

関連する問題