我想使用git版本~/.bashrc
和~/.bash_profile
,最好是在原地(在实际位置(,而不是创建一个新的repo并复制文件并在那里进行版本控制。
有办法做到这一点吗?我认为困难在于,如果我在~
上创建一个repo,它会包含我主目录中的每个文件夹,这是不可取的。
有没有办法告诉git:versiononly这些文件或文件夹,而忽略其他一切,不将它们视为子模块?如果可以这样的话,这可能是一个解决方案,只是它看起来像是一个超级大的repo,位于主目录中,但同时忽略了几乎所有的东西。
您可以在另一个目录中创建repo,然后使用主目录(~
(中的符号链接指向新文件。
mkdir -p ~/path/to/repo
mv ~/.bashrc ~/path/to/repo/
cd ~
ln -s ~/path/to/repo/.bashrc .bashrc
cd ~/path/to/repo
# edit .bashrc
git init
git add .bashrc
git commit -m "Initial commit"
这样,您就有了一个只包含要进行版本控制的文件的普通存储库,而系统的其他部分则像以前一样使用~/.bashrc
,透明地遵循到版本控制文件的链接。不需要.gitignore
或shell别名。
裸回购方法是另一种选择:
没有额外的工具,没有符号链接,文件在版本控制系统上被跟踪,你可以为不同的计算机使用不同的分支,你可以在新安装时轻松地复制你的配置。
该技术包括将Git裸存储库存储在"侧面";文件夹(如
$HOME/.cfg
或$HOME/.myconfig
(,使用特制的别名,以便命令针对该存储库而不是通常的.git
本地文件夹运行,这会干扰周围的任何其他Git存储库。
与别名耦合
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
config config --local status.showUntrackedFiles no
然后只添加您想要的文件:
config add .vimrc
您可以尝试gitignore。
cd ~
git init
echo '*' >> .git/info/exclude
echo '!.bashrc' >> .git/info/exclude
git add .bashrc
git commit -m'foo'
模式忽略除.bashrc
之外的所有模式。
*
!.bashrc
查看Simple Revision Control SRC,这是一个简单的现代版本控制系统,用于管理单个文件(而不是同步更改的文件集合(。或者寻找它们中的鼻祖,Revision Control System RCS(甚至可能作为您最喜欢的Linux发行版的官方包提供(。
不久前,IBM的AIX代码是用RCS管理的(也许到今天为止,这仍然是SCO与IBM的诉讼(。