如何在ruby脚本中执行git log时在不同路径的另一个目录中创建文件

时间:2013-10-08 11:17:07

标签: ruby git git-log

请找到以下代码。

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,并将日志保存在pxe文件夹的gitlog.txt中。

现在我的问题是,如何在另一个目录中创建此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

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

如果问的问题不明确,请告诉我。

1 个答案:

答案 0 :(得分: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")

如果您收到“拒绝权限”错误,则需要确保您确实拥有该文件夹的写入权限(如果该文件夹已存在,则为文件)。