我想将我的主目录(~)置于源代码管理(在本例中为 git)下,因为我有许多设置文件(.gitconfig、.gitignore、.emacs 等),我想在不同的机器上携带它,将它们放在 Git 中将使检索它们变得很方便。
我的主机是 MacBook,按照 OS X 的设置方式,有很多文件夹我想忽略(文档、下载、.ssh)。还有一些文件夹已经在使用 Git (.emacs.d)。
我的想法是将所有这些目录添加到我的 .gitignore 文件中,但这似乎有点烦人,并且可能会导致一些不可预见的后果。我的下一个想法是定期将我想要存储的文件复制到主目录中的某个文件夹中,然后提交该文件夹。这样做的问题是我必须记住在提交之前移动它们。
有没有一种干净的方法来做到这一点?
答案1
我$HOME
在git下有。我的 .gitignore 文件的第一行是
/*
其余的都是使用修饰符时不能忽略的模式!
。第一行意味着默认情况下会忽略我的主目录中的所有文件。我想要进行版本控制的那些文件.gitignore
如下所示:
!/.gitignore
!/.profile
[...]
我的一个更棘手的模式是:
!/.ssh
/.ssh/*
!/.ssh/config
也就是说,我只想进行版本控制.ssh/config
- 我不希望 .ssh 中的密钥和其他文件进入 git。以上就是我实现这一目标的方法。
编辑:在所有路径的开头添加斜杠。这使得忽略模式从存储库顶部($HOME)而不是任何地方匹配。例如,如果!lib/
是一个模式(不要忽略 lib 目录中的所有内容)并且您添加了一个 file .gitignore
,则之前模式 ( !.gitignore
) 与该模式匹配。使用前导斜杠 ( !/.gitignore
),它将仅.gitignore
在我的主目录中匹配,而不在任何子目录中匹配。
我还没有看到这对我的忽略列表产生实际影响的情况,但在我看来,它在技术上更准确。
答案2
我所做的(具有相同的目标)是将我的配置文件放在一个子目录中~/lib
,并在我的主目录中包含符号链接,例如.emacs -> lib/emacs/dot.emacs
.我只保留我在版本控制下明确编写的配置文件;我的主目录包含大量自动创建的点文件,这些文件不受版本控制。因此~/lib
处于版本控制之下,而我的主目录则不受版本控制。
我有一个脚本,可以从 下的文件创建符号链接~/lib
。当我在新计算机上创建帐户时,我通过签出~/lib
并运行该脚本来填充它。
我的经验是使用 CVS,而不是 git,所以它不是 100% 可移植的。我没有将我的主目录直接放在 CVS 下的原因之一是,这~/.cvsignore
将适用于我所有的 CVS 签出,而不仅仅是我的主目录; git没有这个问题。与将主目录置于版本控制之下相比,该方法的缺点是您无法用来git status
区分您明确决定忽略的文件(该文件将在忽略文件中列出,因此不会显示)和您对此没有意见的文件(将显示为?
)。
有些文件在不同的机器上需要不同。我将它们放在名为 的目录中~/Local/SITENAME/lib
,并为它们创建符号链接,或者(对于支持它的文件格式)在~/lib
.我还有一个符号链接~/Here -> ~/Local/SITENAME
。由于 git 与 CVS 不同,它被设计为支持大部分相似但不相同的存储库,因此可能有更好的方法来管理特定于机器的文件。我的一些点文件实际上不是符号链接,而是从~/lib
和下的内容自动生成的~/Here
。
答案3
我们可以使用 Git 的能力来继续跟踪文件,即使它们列在.gitignore
.所以,这足以满足.gitignore
:
$ cat .gitignore
/*
对于要跟踪的每个文件,运行add -f
(-f
参数覆盖忽略 in.gitignore
和.git/info/exclude
):
git add -f .gitignore
git add -f .profile
git add -f .zshrc
git add -f .ssh/config
一旦对文件建立了索引,Git 将跟踪所有更改,尽管该文件已被忽略。这同样适用于目录,但仅适用于实际存在的文件:
git add -f somedirname
如果你想跟踪整个目录所有新文件出现在其中的,可以.gitignore
通过某种方式排除,如camh 的回答:
!/somedirname
如果您想停止跟踪文件,此命令会从 Git 索引中删除文件,但在硬盘驱动器上保持其不变:
git rm --cached .ssh/config
答案4
我用的是旧rcs
的。
查看 、 和 的联机ci
帮助co
页rcs
。这些网站也应该有帮助:
- http://www.jodypaul.com/SWE/RCSTutorial/RCSTutorial.html
- http://docstore.mik.ua/orelly/perl/sysadmin/appa_01.htm
- http://tldp.org/HOWTO/RCS.html
例如,我使用它来控制我的点文件的版本:
ci -u .*vimrc
如果我想编辑它们:
co -l .*vimrc
我建议创建一个RCS
以您的名称命名的目录~
,然后您可以轻松地将该目录备份到某处。