Как использовать надежный, чтобы добавить и зафиксировать все файлы в хранилище
Я инициализирую git-репозиторий, в котором уже есть файлы
repo = Rugged::Repository.init_at(".")
Мне нужно разместить файлы в этой папке и зафиксировать их. Вот что я попробовал:
repo = Rugged::Repository.new(".")
index = repo.index
index.add_all()
options = {}
options[:tree] = index.write_tree(repo)
options[:author] = { :email => "testuser@github.com", :name => 'Test Author', :time => Time.now }
options[:committer] = { :email => "testuser@github.com", :name => 'Test Author', :time => Time.now }
options[:message] ||= "Making a commit via Rugged!"
options[:parents] = repo.empty? ? [] : [ repo.head.target ].compact
options[:update_ref] = 'HEAD'
Rugged::Commit.create(repo, options)
Однако если я загляну в каталог и запустить git status
все, что я получаю, это:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: .editorconfig
deleted: .gitignore
deleted: Procfile
deleted: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
.editorconfig
.gitignore
Procfile
README.md
1 ответ
Это решение обновляет исходный код до текущих стандартов Rubocop, добавляет средства программного создания нескольких файлов и включает предложение, предоставленное @DeepParekh.
require 'rugged'
require 'tmpdir'
def write(file_name_content)
file_name_content.each do |item|
item.each do |name, content|
File.write name, content
end
end
end
def write_files
write [
'file1.html' => <<~END_INDEX
<p>
Line 1 in file1.html.
</p>
END_INDEX
]
write [
'file2.html' => <<~END_INDEX
<p>
Line 1 in file2.html.
Line 2.
</p>
END_INDEX
]
end
Dir.mktmpdir do |temp_dir| # This directory will be deleted on exit
Dir.chdir(temp_dir)
puts "Working in #{temp_dir}"
write_files
repo = Rugged::Repository.init_at temp_dir
index = repo.index
index.add_all
index.write
options = {}
options[:tree] = index.write_tree(repo)
now = Time.now
options[:author] = { email: "testuser@github.com", name: 'Test Author', time: now }
options[:committer] = { email: "testuser@github.com", name: 'Test Author', time: now }
options[:message] ||= "Making a commit via Rugged"
options[:parents] = repo.empty? ? [] : [repo.head.target].compact
options[:update_ref] = 'HEAD'
new_commit = Rugged::Commit.create(repo, options)
puts "Commit #{new_commit[-8..]} created.\n\n"
puts `git status`
files = Dir["*"]
if files.reject { |x| x == '.git' }.empty?
puts "No physical files were created."
else
puts "Physical files are:\n #{files.join("\n ")}"
end
end
Выход:
Working in /tmp/d20230311-236770-h93tav
Commit 9fa0a9be created.
On branch master
nothing to commit, working tree clean
Physical files are:
file1.html
file2.html