0

请在下面找到代码。

Dir.chdir('/home/user/Source/pxe/')do
system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => ['gitlog.txt', 'a'])
end

根据用户的版本输入,我git log在两个版本之间执行并将日志保存在gitlog.txtpxe 文件夹中。

现在我的问题是,如何gitlog.txt在另一个目录中创建它并将日志附加到同一个文件中,比如新的文件路径是:/home/user/server-diff/gitlog.txt

我以以下方式尝试了它,但没有写入文件并在执行时引发错误 Permission denied- /home/user/server-diff/gitlog.txt (Errno::EACCES)

file = File.new("/home/user/server-diff/gitlog.txt", "w")
Dir.chdir('/home/user/Source/pxe/')do
    system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => [file, 'a'])
    end

请让我知道如何继续,我还有一个与此相关的问题。

请让我知道所提出的问题是否有任何不明确之处。

4

1 回答 1

0

您在通话中混合了两种使用文件的方式system。您可以事先使用文件对象(确保以“追加”模式而不是“写入”模式打开它),然后将该对象传递给system不带"a":

file = File.new("/home/user/server-diff/gitlog.txt", "a")
Dir.chdir('/home/user/Source/pxe/')do
  system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => file)
end

或者您可以完全摆脱该file = ...行并将文件名传递给system,保留"a"选项:

Dir.chdir('/home/user/Source/pxe/')do
  system("git log "+ version_one +" " + version_two +" --pretty=format:'%h %ad%x09%an%x09%s' --date=short", :out => ["/home/user/server-diff/gitlog.txt", "a"])
end

此外,您需要确保要写入的目录存在:

Dir.mkdir("/home/user/server-diff") unless Dir.exists?("/home/user/server-diff")

如果您收到 Permission Denied 错误,您需要确保您确实拥有对该文件夹(以及文件,如果它已经存在)的写入权限。

于 2013-10-08T11:33:17.220 回答