使用Ruby确定哪些git文件已更改?

时间:2010-10-11 16:08:40

标签: ruby git diff

我有一个带有博客条目的Rails应用程序,我想从另一个Blog.git回购更新。

我设想我的工作流程如下:

  1. 撰写新博客条目
  2. 推送到远程Git仓库
  3. 调用上限部署:更新,它将调用Rake任务以使用任何已更改或新条目更新数据库
  4. 此处的故障是找到哪些文件已更改。我想为此利用Git,我知道我可以在git diff上做一些awk或Perl脚本。

    但是有更好的方法吗?我简要地看了一下Grit,但找不到一个好的解决方案。

    更新:事实证明,Grit是解决此问题的最佳解决方案,至少据我所知。以下是我用来解决问题的方法:

    desc 'Posts all entries to database'
    task :post_all do
      Dir.chdir REPO do
        Grit::Repo.new('.').tree.contents.each do |file|
          # post_entry cleans up my blog entries and posts them via Post.create()
          post_entry(file.data, :text) unless file.basename =~ /\.gitignore/
        end
      end
    end
    
    desc 'Posts all new or changed entries to database'
    task :post_new do
      Dir.chdir REPO do
        Grit::Repo.new('.').head.commit.diffs.each do |diff|
          post_entry diff.b_blob.data, :text
        end
      end
    end
    
    desc 'Deletes entries from database'
    task :remove_all do
      Post.destroy_all
    end
    
    desc 'Synchronizes the remote blog repo and the database'
    task :sync => [ :remove_all, :post_all ]
    

1 个答案:

答案 0 :(得分:2)

真的有必要使用数据库吗?看看jekyll宝石。数百个(如果不是数千个)简单博客使用它,包括我的两个。

http://github.com/mojombo/jekyll

否则,砂砾是一个很好的解决方案。我已经将它用于一些事情并且效果很好。