4

私は github.com にリポジトリを持っており、ワークステーションに git プルダウンし、編集し、コミットしてから、git プッシュで変更を github に戻します。これはすべてうまくいきます。

しかし、私はよく github.com から読み取り専用コピーを複製します。

git clone git://github.com/jhsrennie/Test.git Test-ro

通常、これは、開発を行わない一時的なテスト インストールがあるためですが、コードのビルドと実行を確認する必要があります。私の github リポジトリのコピーは、変更を github にプッシュする必要がないため、読み取り専用にすることができます。問題は、次を使用して github から読み取り専用コピーに変更をプルダウンするときです。

git pull origin master

git status が次のように表示されることがわかりました。

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)

変更をプッシュバックすることはできませんし、とにかくしたくありませんが、未処理のコミットが原因で問題が発生します。たとえば、新しいリモート ブランチをチェックアウトできません。読み取り専用のリポジトリを削除し、更新が必要になるたびに再クローンする必要があります。

プッシュする必要があるコミットがあると思わせずに、github.com から github リポジトリの読み取り専用コピーを更新するにはどうすればよいですか?

または、これをばかげた方法で行っていますか?目標を達成するためのより良い方法はありますか?

カップケーキの答えへの応答

私にとっても奇妙に思えますし、明らかに何かが欠けています。問題を再現する方法は次のとおりです。

  • 次を使用してリポジトリをクローンします。git clone git@github.com:jhsrennie/Test.git Test-rw
  • 次のコマンドを使用して、読み取り専用コピーを複製します。git clone git://github.com/jhsrennie/Test.git Test-ro
  • に変更を加えてからTest-rwgit addgit commit

git status(ご想像のとおり)次のようになります。

renniej@RATHAUS /d/Dev/GIT/Test-rw (master)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.

そして最後に、変更を github にプッシュします。git push origin master

次に、読み取り専用コピーに切り替えて、次のことを確認しgit statusます。

renniej@RATHAUS /d/Dev/GIT/Test-ro (master)
$ git status
# On branch master
nothing to commit, working directory clean

を使用して更新するgit pull origin masterと、次のようになります (これは、単一ファイル README.md への変更でした):

renniej@RATHAUS /d/Dev/GIT/Test-ro (master)
$ git pull origin master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From git://github.com/jhsrennie/Test
 * branch            master     -> FETCH_HEAD
Updating 76b02d1..5b03266
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)

そしてgit status今与える:

renniej@RATHAUS /d/Dev/GIT/Test-ro (master)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.

私が考えることができる唯一の説明は、更新が元のクローン元と同じリポジトリからのものであることを読み取り専用コピーが認識しないということですが、これは控えめに言っても奇妙に思えます。

4

2 に答える 2

6

何が起きているかというと、リモート追跡ブランチorigin/masterが更新されていないということです。git-pullman ページを読むgit pullと、引数を指定して が呼び出された場合の動作が文書化されています。

A parameter <ref> without a colon is equivalent to <ref>: when pulling/fetching, so it merges <ref> into the current branch without storing the remote branch anywhere locally

簡単な修正は、が trackに設定されていることを確認してからmasterorigin/master、引数なしで呼び出すgit pullことです。これにより、リモート追跡ブランチが更新されます。

すでに実行しており、 refgit pull origin masterを更新する必要がある場合は、またはを使用します。origin/mastergit fetchgit remote update

于 2013-08-05T19:33:53.833 に答える
0

Pikrassが指摘するように、メッセージは

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)

に存在しないローカル コミットがあることを示していますremote/master。リポジトリ全体を削除して再クローン化する代わりに、ローカルmasterをハード リセットして、次のように同じポイントにすることができorigin/masterます。

$ git reset --hard origin/master

ただし、あなたが提供した情報からすると、あなたがしmasterorigin/masterいることがgit pull origin master.

また、GitHub から新しいテスト リポジトリのクローンを作成する代わりに、テスト リポジトリのローカル コピーが既にある場合は、ローカルでそのクローンをさらに作成するだけで済みます。ネットワーク経由でリポジトリをダウンロードする必要がないため、高速になります。 :

$ git clone <directory path to local repo> <new clone name>

ただし、追加の構成を行わない場合、この新しいクローンには、クローン元のローカル リポジトリが として設定されるoriginため、読み取り専用にはならず、新しいクローンからプッシュすると、元のクローンの変更を上書きすることができます。

于 2013-08-05T17:41:50.973 に答える