4

次の操作をruggedどのように実行しますか: fetchpullおよびrebase?

私はブランチを使用しており、クラスのガイドとしてここdevelopmentにあるドキュメントを確認した後。Remote

編集: sincegit pullは の単なる省略形でgit fetchありgit merge FETCH_HEAD、より良い質問はgit fetch、 、git mergeおよびの実行方法git rebaseです。

4

2 に答える 2

4

上記の答えは時代遅れのようです。構文が変更されました。フェッチしてからマージしてコミットしようとしているプルアクションを実装する必要があります。フェッチには、このようなフェッチメソッドを使用します

repo.fetch('origin', [repo.head.name], credentials: credits)

そして、返されたハッシュはフェッチされたものに関する情報でいっぱいであるため、実際に何かを取得しているように見えます。ただし、ディスクには書き込まれません。コマンドラインで git status を実行すると、ブランチがいくつかのコミットの背後にあると予想されますが、そうではありません。上記の同じコマンドでもう一度フェッチすると、何もフェッチされません。これはおそらく、最初に既にフェッチされているためですが、フェッチがどこにあるのかわかりません。

次に、コマンド ラインで手動でフェッチを実行してから、次のコードを使用して、リモート ブランチのローカル コピーとローカル ブランチをマージしようとします (ローカルの変更は既にコミットされています)。

ref_name = repo.head.name                            # refs/heads/branchname
branch_name = ref_name.sub(/^refs\/heads\//, '')     # branchname
remote_name = "#{remote}/#{branch_name}"             # origin/branchname
remote_ref = "refs/heads/#{remote_name}"             # refs/heads/origin/branchname

local_branch = repository.branches[branch_name]
remote_branch = repository.branches[remote_name]

index = repo.merge_commits(local_branch.target, remote_branch.target)

options = {
  author:     { time: Time.now }.merge(author),
  committer:  { time: Time.now }.merge(committer),
  message:    'merged',
  parents:    [
    local_branch.target,
    remote_branch.target
  ],
  tree:       index.write_tree(repository),
  update_ref: 'HEAD'
}
Rugged::Commit.create repo, options

期待どおりにコミットを作成します。コミットはディスクにも書き込まれ、フィストリーに表示されます。しかし、何らかの理由で、ブランチの変更がコミットされていません。ローカル ファイルの内容は変更されていません。フェッチされたコミットの内容が含まれていると思います。

フェッチ、マージ、コミットの実際の例を教えてください。これを書いている時点での rugged のバージョンは 0.22.0b3 です。

更新 1

これにより、作業ツリーが必要な状態になります

repo.checkout ref_name, strategy: :force

Update2

状態を取得してディスクに保存する方法を見つけました

r = repo.remotes[remote]
r.fetch(credentials: git_credentials)
r.save
于 2014-12-04T09:31:58.503 に答える