8

我将我的配置文件(~/.bashrc, ~/.emacs,~/emacs等)存储在 git 中。我配置它的方式只是在主目录中添加一个 git 存储库。

我发现这种方法有一些问题:

  • git gui需要永远,因为它递归地扫描整个主目录。
  • 我有时不小心将文件添加到应该转到新仓库的配置仓库(我创建了一个新项目,比如在 中~/projects/foo,忘记它还没有初始化 git repo,并git add bar.xyzfoo目录中执行。这导致文件被添加到配置仓库)。

我不确定将 git 存储库嵌套在已经有 git 存储库的目录下是否明智,尽管我还没有遇到任何基本问题。

有没有更好的方法,或者这是人们在 git 中存储本地配置文件的标准方式?

4

2 回答 2

3

我像你一样将我的点文件保存在一个 Git 存储库中——我的主目录是一个 Git 存储库。

  • git gui: 我很少使用它,所以我不确定它的性能如何受到许多未跟踪文件的影响。但是,我确实有一个~/.gitignore仅包含*. 也许忽略一切会为您加快速度git gui

  • 意外添加文件:创建一个~/.gitignore仅包含文件的文件*也解决了当您忘记初始化新项目存储库时意外将文件添加到 dotfiles 存储库的问题(-f如果您真的要添加文件,它会告诉您使用)。

  • 我从来没有遇到过嵌套存储库的问题。

一些注意事项:

  • ~/.gitignore我设置为的主要原因*git status它不会显示我的主目录中的每个文件。它迫使我一直使用git add -f,这有点烦人,但没什么大不了的。

  • 养成使用git clean -dx而不是git clean -dxf. 您必须记住git config clean.requireForce false在新的项目存储库中运行,但如果您不在您认为自己所在的目录中,它会防止您意外删除主目录中的所有文件。

  • Git 有时会决定重置文件权限。如果您想chmod og-rwx在 Git 存储库中保留敏感文件 ( ),这可能会很糟糕。我通过一个post-checkout钩子来处理这个问题,该钩子修复了某些文件和目录(例如,~/.ssh/authorized_keys)的权限。

于 2013-06-14T03:12:35.690 回答
3

我正在使用 git repo 来管理点文件。它包含:

  1. 一个目录dotfiles,其中包含我要跟踪的实际点文件/点目录。
  2. 一个 shell 脚本,用于创建 in 的符号链接dotfiles/.*$HOME例如

    for dotfile in dotfiles/.* ; do
      case $(basename $dotfile) in
        .)
          ;;
        ..)
          ;;
        *)
          ln -sv $(realpath dotfile) $HOME/$(basename $dotfile)
          ;;
      esac
    done
    

在我添加新dotfiles内容(通常是通过将 dotfile 移动到 repo 中)或在新的和干净的$HOME.

回购可以驻留在任何地方。$HOME我在使用的每台主机上都有一个克隆。

通过这种方式,我有一个更小且非嵌套的工作树,可以有选择地跟踪点文件。

ps 您可能想要添加类似dotfiles/.config/*to的条目.gitignore,它包含许多我不想跟踪的文件。

于 2013-06-13T10:04:18.303 回答