5

基本的に、リモート git リポジトリを 1 分ごとにチェックする crontab タスクを作成しています。変更がある場合は、それらを (ローカル リポジトリに) プルし、各コミットを通過し、コミットごとに grunt selenium タスクを実行します。

ちょっと立ち往生している部分は、リモートの git リポジトリに新しいコンテンツがあり、プルする必要があるかどうかを確認する方法です!

4

3 に答える 3

12

それを見つけるために使用できますgit ls-remote

git ls-remote origin master

このコマンドは、マスター ブランチの最新の sha-1 ID を取得します。必要な数のブランチを指定することも、ブランチを指定しないですべてを取得することもできます。それを使用して、ローカルブランチと比較できます。

ただし、同じネットワーク操作を 2 回行う必要がないように、すべての変更をフェッチする方が効率的かもしれません。

git fetch origin

このようにして、「origin/master」で更新を取得し、「master」と比較して更新があるかどうかを確認できます。これはマージもリベースもしないので、更新があることを検出したら、やりたいことは何でも実行git pullできます。git mergegit rebase

于 2013-10-11T11:33:34.593 に答える
6
git fetch
git log ..origin/master --oneline | wc -l

プル時に適用されるリビジョン (コミット) の数を出力します。

0 より大きい場合は、新しいコンテンツがあることを意味します。

于 2013-10-11T12:35:17.357 に答える
0

私の知る限り、2 つのコマンドが役立つ可能性があります。間違っていたらごめんなさい。申し訳ありません。

Git には、リモート リポジトリから自身を更新するための 2 つのコマンドがあります。git fetch は別のレポと同期し、ローカルにないデータをすべてプルダウンし、同期したときにそのリモートの各ブランチがあった場所へのブックマークを提供します。これらは「リモート ブランチ」と呼ばれ、ローカル ブランチと同じですが、Git ではチェックアウトできないことを除けば、ローカル ブランチと同じですが、マージしたり、他のブランチと比較したり、履歴ログを実行したりできます。同期した後、ローカルでそのようなものを。

リモート サーバーから新しいデータを取得する 2 番目のコマンドは git pull です。このコマンドは基本的に git fetch を実行し、その後すぐにそのリモートのブランチの git merge を実行します。これは、現在のブランチによって追跡されます。引っ張るという考え方、

リモートがすべてセットアップされていて、更新を取り込みたいと仮定すると、最初に git fetch [alias] を実行して、持っていないすべてのデータを取得するように Git に指示し、次に git merge [alias] を実行します。 /[branch] サーバー上で新しいものをすべて現在のブランチにマージします (その間に他の誰かがプッシュした場合など)。したがって、他の何人かと一緒に Hello World プロジェクトに取り組んでいて、最後に接続してからプッシュされた変更を取り込みたい場合は、次のようにします。

$ git fetch github
remote: Counting objects: 4006, done.
remote: Compressing objects: 100% (1322/1322), done.
remote: Total 2783 (delta 1526), reused 2587 (delta 1387)
Receiving objects: 100% (2783/2783), 1.23 MiB | 10 KiB/s, done.
Resolving deltas: 100% (1526/1526), completed with 387 local objects.
From github.com:schacon/hw
   8e29b09..c7c5a10  master     -> github/master
   0709fdc..d4ccf73  c-langs    -> github/c-langs
   6684f82..ae06d2b  java       -> github/java
 * [new branch]      ada        -> github/ada
 * [new branch]      lisp       -> github/lisp

ここでは、このリモートと最後に同期してから、5 つのブランチが追加または更新されていることがわかります。「ada」と「lisp」ブランチは新しく、「master」、「c-langs」、「java」ブランチは更新されています。この例では、他の開発者が提案された更新を、'master' にマージされる前にレビューのためにリモート ブランチにプッシュしています。

Git が作成するマッピングを確認できます。リモート リポジトリの「マスター」ブランチは、ローカルでは「github/master」という名前のブランチになります。そうすれば、git merge github/master を実行して、そのリモートの「マスター」ブランチをローカルの「マスター」ブランチにマージできます。または、git log github/master ^master を実行して、そのブランチにある新しいコミットを確認できます。リモートの名前が「origin」の場合、代わりに origin/master になります。ローカル ブランチを使用して実行するほとんどすべてのコマンドは、リモート ブランチも使用できます。

複数のリモート リポジトリがある場合は、実行して特定のリポジトリからフェッチするか、実行git fetch [alias]してすべてのリモートと同期するように Git に指示できます。git fetch --all.

git status コマンドも

git status コマンドは、作業ディレクトリとステージング領域の状態を表示します。どの変更がステージングされ、どの変更がステージングされていないか、どのファイルが Git によって追跡されていないかを確認できます。ステータス出力には、コミットされたプロジェクト履歴に関する情報は表示されません。このためには、git log を使用する必要があります。

git status

ステージングされている、ステージングされていない、追跡されていないファイルを一覧表示します。

于 2013-10-11T11:32:28.270 に答える