在 $home 目录中使用 git init 来跟踪点文件是不好的做法吗?

Seb*_*sen 40 configuration git home-directory

我想使用 github 备份和同步我的点文件。由于默认情况下所有点文件都驻留在 $home 中,我应该只git init在 $home 文件夹中,还是这是个坏主意?

git init在 $home 中执行后,我的想法是 .gitignore 所有非点文件和非点文件夹。

Rav*_*ina 57

创建一个“裸”的 git 存储库:

cd $HOME
git init --bare .dotfiles
Run Code Online (Sandbox Code Playgroud)

--bare标志会创建一个没有工作目录的存储库,从而无法在该存储库中编辑文件和提交更改。

创建别名来管理我们刚刚创建的存储库:

alias dotfiles="/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME"
Run Code Online (Sandbox Code Playgroud)

忽略未跟踪的文件显示在git status

dotfiles config --local status.showUntrackedFiles no
Run Code Online (Sandbox Code Playgroud)

添加你想要的文件:

dotfiles add .bash_aliases
Run Code Online (Sandbox Code Playgroud)

犯罪。

dotfiles commit -m 'Add .bash_aliases'
Run Code Online (Sandbox Code Playgroud)

现在使用bare存储库,.git您的$HOME目录中没有目录;因此在使用git.

这就是我管理我的dotfiles. 几年前我第一次在这里读到它。

  • [来源](https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-init):“按照惯例,使用`--bare` 标志初始化的存储库以`.git` 结尾.” 根据该约定,我认为最好执行 `git init --bare .dotfiles.git` 而不是 `git init --bare .dotfiles`。 (6认同)

nev*_*ves 13

这是一个很好的做法,但默认情况下您应该忽略所有文件,只添加您需要的文件。下面是一个例子.gitignore

# ignore all
*
# include dot files (including .gitignore)
!.*
Run Code Online (Sandbox Code Playgroud)

您还可以排除将其他行放在 .gitignore 末尾的其他文件:

# ignore all
*
# include dot files (including .gitignore)
!.*
.ssh 
Run Code Online (Sandbox Code Playgroud)

  • 这不包括:。(当前目录)?.ssh(ssh 目录,包含潜在的私钥)? (3认同)

小智 10

如果您对在您的主文件夹中拥有一个 git 存储库感到有些不安(我会这样做),您可以考虑这个想法:

  • 创建一个Git仓库其他地方,例如,~/src/configuration或者~/etc或你喜欢的地方。
  • 把你所有的配置文件放在那里。
  • 用符号链接替换您的配置文件(在正常路径中)到这个存储库。
  • 也许编写一个简单的 shell 脚本来检查符号链接是否指向您期望它们指向的位置,然后每天在 cron 作业中运行它。

计算中的每个问题都可以通过额外的间接层来解决;-)

  • 如果您将配置设置为 `mode = "symlink"`,[chezmoi](https://www.chezmoi.io/) 会执行上述*所有*操作。您还可以将其配置为使用纯文件而不是符号链接。(您需要设置一个 cronjob,但“检查”是免费的。) (2认同)

Pie*_*and 7

你可以看看yadm,它主要是这样做的,但我想它更安全,设置可能更容易。我认为这只是一个最初的git的包装(它有更多的功能虽然),这意味着你可以用通常的Git命令替换gityadm(如yadm添加/克隆/状态等)

我不隶属于yadm,只是一个快乐的用户。


Cap*_*iel 6

我会说这确实是一种不好的做法。https://dotfiles.github.io/tutorials/https://github.com/webpro/awesome-dotfiles上的教程都不会让您将主文件夹直接跟踪到主级 git 存储库中。大多数将手动复制或符号链接文件。

虽然 git 跟踪您的 dotfiles 是一个好主意,但在家庭级别拥有一个 git repo 很容易在您实际上打算在更具体的目录存储库中运行它时意外地向该 repo 运行命令。

例如:

mkdir ~/Projects/my-awesome-web-app
cd ~/Projects/my-awesome-web-app
npm init # initializes node projects, creates package.json
git add package.json # would not fail, since it's actually inside a git repo
git commit -m "starts work" # actually commits to the home repo, not locally
Run Code Online (Sandbox Code Playgroud)

此外,Anish Athalye 选择直接在 git 下跟踪主文件夹

  • 不可能意外删除您的文件。将您的整个主目录置于版本控制之下,运行 git clean 之类的程序可能会清除主目录中 VCS 未跟踪的所有内容。
  • 可以跟踪属于 $HOME 以外的其他位置的配置文件。
  • 在新机器上安装点文件更容易。所需要的只是克隆您的点文件,然后复制或链接文件。将整个主目录保留在版本下会使安装变得复杂。