2

我是 git 新手,我在使用 git 时遇到了一些问题。我管理着一堆服务器。我想要的是我编辑的配置文件的本地存储库。如果出现配置错误,我可以轻松地跳回工作版本。

例如:我编辑了一个不在存储库中的文件。编辑后,我想将其自动添加到 repo 中,包括绝对路径并进行提交。应在退出时自动询问提交消息。

到目前为止,我在 vimrc.local 中使用这一附加行进行了尝试:

autocmd BufWritePost * let message = input('Message? ', 'Auto-commit: saved ' . 
expand('%')) | execute ':silent ! if git rev-parse --git-dir > /dev/null 2>&1 ; 
then git add % ; git commit -m ' . shellescape(message, 1) . '; fi > /dev/null 2>&1'

资料来源:堆栈溢出

这并不能解决我的问题,因为文件不包含在它们的绝对路径中,有时根本没有添加。

我听说逃犯可以做到这一点,但我不让它以这种方式工作。

我想我不是第一个遇到这个问题的人。谁能解释我如何逐步设置它。请考虑到我是这个话题的新手。

在此先感谢克里斯

4

1 回答 1

1

从长远来看,我认为如果你逃亡工作,你会更有效率。我觉得:Gdiff非常宝贵。

我不喜欢 vim 中长单行的风格。如果我晕,我会盯着正则表达式。我将按如下方式分解您的自动命令,以使其更易于理解和更新:

autocmd BufWritePost * call AutoGitCommit()

function! AutoGitCommit()
  let message = input('Message? ', 'Auto-commit: saved ' . expand('%'))
  let message = shellescape(message, 1)
  let shellcommand = 'if git rev-parse --git-dir > /dev/null 2>&1 ; '
  let shellcommand .= 'then git add ' . expand('%:p') . ' ; '
  let shellcommand .= 'git commit -m ' . message . '; '
  let shellcommand .= 'fi > /dev/null 2>&1'
  execute ':silent!' shellcommand
endfun

由于文件名现在在字符串上下文中,%将不再自动扩展,所以我使用escape(). 我添加了:p修饰符,因为您要求提供绝对路径。见:help expand():help filename-modifiers

事实上,我更喜欢让 vim 处理条件,如下所示:

function! AutoGitCommit()
  call system('git rev-parse --git-dir > /dev/null 2>&1')
  if v:shell_error
    return
  endif
  let message = input('Message? ', 'Auto-commit: saved ' . expand('%'))
  call system('git add ' . expand('%:p'))
  call system('git commit -m ' . shellescape(message, 1))
endfun
于 2014-03-23T13:39:33.257 回答