能否将git提交钩子到Textmate的保存上?

3
每次在Eclipse中按保存键,都会将其副本存储在Eclipse本地历史记录中,这使我成为Eclipse用户的原因之一。然后,您可以对本地历史记录进行差异比较。
尽管我听说过Textmate很棒,但我仍想使用它。我知道未来版本中有一个功能请求,但我想知道是否有人找到了插件或其他方法来将此功能现在加入Textmate中?我知道这是一个不太可能的事情,但问问也无妨。
谢谢。
更新!(编辑了问题的标题,因为以前的标题没有引起兴趣)我刚意识到这可能是一个解决方案。将Textmate保存挂钩到git提交中是否可行?

1
你如何在TextMate中保存?一个可能的hack解决方案是编写一个bundle条目,该条目保存文件,然后进行提交,然后将command-s重新绑定到此bundle条目。但是,如果您使用“文件>保存”来保存,则这对您没有任何好处...如果这可能有帮助,请告诉我,我会将其编写为答案。 - Josh Bleecher Snyder
谢谢, Josh,那太棒了! - joedevon
请参阅如何让Git自动提交 - Robin Green
1个回答

6
你需要的是这个:创建一个新命令,将“保存”设置为“当前文件”(此选项位于文本区域上方),将“输入”设置为“整个文档”,将“输出”设置为“显示为工具提示”。现在将下面的代码复制到文本区域中,并将Command-S分配为命令键绑定。
#!/usr/bin/env ruby
filename = ENV["TM_FILEPATH"].split("/").last
`git add #{ENV["TM_FILEPATH"]}`
`git commit -m "#{filename}"`

每次您键入Command-S时,文件将被保存并提交到(已存在的)git存储库。如果文件没有更改,则不会进行提交,因为git会阻止提交。
下面我扩展了命令以弹出对话框以获取提交消息,并在找不到git存储库时提供良好的警告。您应该能够自己解决其余部分。 :)
#!/usr/bin/env ruby
require ENV['TM_SUPPORT_PATH'] + '/lib/ui'

filename = ENV["TM_FILEPATH"].split("/").last
message = TextMate::UI.request_string(
    :title => "Commiting changes of #{filename}",
    :prompt => "Please enter the commit message for your changes."
)

add = `git add #{ENV["TM_FILEPATH"]} 2>&1`
commit = `git commit -m "#{message}" 2>&1`

git_answer = add + commit
unless git_answer.grep(/fatal/).empty?
  puts "Please initialize git repository first!"
end

@joedevon 你的 $PATH 变量中有没有包含 git?(在终端中尝试运行 "echo $PATH")。如果有,它是否对所有程序都加载了,即不是在某个登录钩子文件(比如 .login 文件)中?(TextMate 不会使用那个文件。) - Florian Pilz
忘了提到我已经将git加入$PATH并且它正常工作,现在将您的弹出窗口添加到Command-S,非弹出窗口添加到Command-Shift-S。 - joedevon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接