我是git的新手,我有点像我想要的那样使用git。 我管理着一堆服务器。 我想要的是我编辑的配置文件的本地存储库。如果遇到missconfiguratin,我可以轻松地跳回到工作版本。
例如: 我编辑了一个不在存储库中的文件。编辑后我想自动将它添加到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'
这并不能解决我的问题,因为文件没有包含在绝对路径中,有时根本没有添加。
我听说逃亡者可以做到这一点,但我不会这样做。
我想我不是第一个遇到这个问题的人。任何人都可以解释我如何逐步设置它。请考虑我是这个主题的新手。
提前致谢 克里斯
答案 0 :(得分: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
由于文件名现在位于String上下文中,%将不再自动展开,因此我使用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