次の操作をrugged
どのように実行しますか: fetch
、pull
およびrebase
?
私はブランチを使用しており、クラスのガイドとしてここdevelopment
にあるドキュメントを確認した後。Remote
編集: sincegit pull
は の単なる省略形でgit fetch
ありgit merge FETCH_HEAD
、より良い質問はgit fetch
、 、git merge
およびの実行方法git rebase
です。
上記の答えは時代遅れのようです。構文が変更されました。フェッチしてからマージしてコミットしようとしているプルアクションを実装する必要があります。フェッチには、このようなフェッチメソッドを使用します
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