将你的 .vim ~/.vimrc 添加到 GitHub 上(也称为点文件)

61

我看到有些人在他们的 Git 存储库中存储了其点文件,我想知道他们是否只是

cd ~/
git init
git add .vimrc
// etc

他们是通过什么方式保持更新的?他们可能会制作副本并同步吗?

你们推荐或使用什么样的策略?我大多数情况下不想提交和推送整个~/目录。

谢谢

5个回答

80

把你的家目录变成Git仓库可能不是一个好主意(你将会花费更多时间来创建.gitignore文件而不是做你想做的事情)。

我建议为你的点文件使用单独的Git目录(例如~/git/dotfiles),然后在你的家目录中创建符号链接(例如ln -s ~/git/dotfiles/.vim ~/.vim等)。

如果你不想每次都手动创建符号链接安装你的点文件,你可以使用下面这样的脚本:https://github.com/gibfahn/dot/blob/master/link


28
这个解决方案很好。但你不需要花费过多的时间来管理你的.gitconfig文件。相反,你可以忽略掉所有的./*,然后再把.vimrc文件排除在外,即!.vimrc,这样就不会被忽略了。 - Sethish
1
@Sethish,做得很漂亮。我认为你的答案是最好/最干净的。如果你把它变成答案,我会给它+1以使它更加显眼! - Jon49
我认同在您的主目录中创建git目录是个坏主意,但如果你尝试包含.bash_profile和其他点文件,上述方法会变得很烦人。您很容易遇到“太多级符号链接”错误,并且您链接到创建它们的脚本也有些容易出错(具有greadlink等依赖项)。如果目标确实是为了节省麻烦并且您的重点真正在于vim,则像@romanil下面使用的方法是理想的方式。这不一定是一个糟糕的答案,但可能不是大多数用户最友好的方法。 - jonnybot
2
另一个有趣的工具是这个:https://github.com/thoughtbot/rcm 您可以使用./configure --prefix =〜/ git / dotfiles轻松在本地安装它。 - samvv
2
如果您选择使用git在主目录下进行操作,并忽略所有./*的文件,请确保重新配置全局.gitignore,以免与之后的所有git仓库发生冲突:git config --global core.excludesfile ~/.gitignore-global(或类似的命令)。 - waffl
创建符号链接的方式有关系吗?例如,如果原始的vimrc文件位于您的主目录中,而“虚假”的vimrc文件位于您的Git版本控制目录中,这会有影响吗? - Niko Bellic

61

我将我的~/.vim目录放入版本控制,并将我的“真正”的vimrc(包含所有设置的那个)放在该目录下,位置是~/.vim/vimrc

~/
---- .vim/
---- ---- (plugins and stuff)
---- ---- vimrc
---- .vimrc

我的常规~/.vimrc只有一行:

runtime vimrc

不需要创建符号链接或其他操作。

以下是我如何在已安装Git的新机器上推送我的配置:

$ cd
$ git clone git@github.com:romainl/dotvim.git .vim
$ echo "runtime vimrc" > .vimrc

以下是整个创建过程。我假设您已经在Github上创建了一个名为“vimconfig”的账户和仓库,并且您已经拥有一个精心制作的~/.vimrc和一个组织良好的~/.vim/

$ cd
$ mv .vimrc .vim/vimrc
$ echo "runtime vimrc" > .vimrc
$ cd .vim
$ git init
$ echo "This is my Vim config." > README
$ git add *
$ git commit -m "My Vim config is versioned."
$ git remote add origin https://github.com/username/vimconfig.git
$ git push origin master

此时,你的Github仓库和本地仓库应该拥有相同的内容。

你可以像平常一样管理本地仓库,并在准备好提交时将其推送。很简单。

请注意,如果您需要/希望在多台计算机上同步配置,或者以某种方式与他人共享配置,则整个Github都非常有用。如果不需要这样做,那么使用GitHub就没有任何意义了。

(编辑)

Vim 7.4引入了一个非常有用的新方案:它会查找通常的~/.vimrc文件以及~/.vim/vimrc文件,这样你就需要做的工作更少了:

$ cd .vim
$ git init
$ echo "This is my Vim config." > README
$ git add *
$ git commit -m "My Vim config is versioned."
$ git remote add origin https://github.com/username/vimconfig.git
$ git push origin master

当然,如果你需要处理混合的Vim版本,我最初建议的策略仍然有效:Vim知道该怎么做,不会无限循环。


1
在 Windows 上,它是 %USERPROFILE%\vimfiles\vimrc。 - evpo

4
我已经有一个“bundle”文件夹,把我所有的插件放在里面,通过Pathogen来加载。所以,我把那个文件夹作为我的git文件夹(包含子模块的插件),并把我的vimrc文件放在那里。
在官方的.vimrc中,我写道:
let $MYVIMRC="<path_to_vimrc_in_bundle_folder>"
source $MYVIMRC
...
call pathogen#infect()

我不希望给代码打版本号!

这样可以让我在家里的Linux机器和工作中的Windows电脑之间共享我的配置。我还可以放入官方的.vimrc配置文件,特定于该机器的配置,或者我不想公开的配置(比如包含登录名和密码的dbext配置文件)。


2
这里提供一个平台无关且与shell无关的解决方案,除了可用的Bourne兼容shell(如bash、zsh、ksh等)外,没有其他依赖项。它适用于Mac、Linux和Windows系统:dotsys。它可以自动将您的dotfiles更改与GitHub和多台机器同步,还有许多其他功能。

1

请查看StreakyCobra在Hacker News上的解决方案:

git init --bare $HOME/.myconf
alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME'
config config status.showUntrackedFiles no

其中~/.myconf是裸的git仓库位置。然后,可以像下面这样将$HOME中的任何文件版本化:

config status
config add .vimrc
config commit -m "Add vimrc"
config add .config/redshift.conf
config commit -m "Add redshift config"
config push

如果您需要进一步的解释,Nicola Paolucci提供了很好的解释

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