使用git管理主目录

Aur*_*rre 36 git

我想在我的Linux $ HOME目录中创建一个单独的git repo.在这个回购 - 显然 - 我可以在版本控制下添加所有内容,但这没有任何意义.我只想添加与我相关的文件和文件夹,如.vimrc,.vim,.bashrc等(可能只有隐藏文件和文件夹,但可能没有)

我知道我可以利用.gitignore来尝试实现这样的行为,但这将是痛苦的,几乎无法维护.相反,我想知道的是,是否有任何方法可以手动声明我想要管理的文件和文件夹,只有那样.

Nik*_*las 38

的.gitignore

# Ignore everything
*

# But not these files...
!*.vimrc
!*.vim
!*.bashrc
!.gitignore

# etc...
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是op所要求的,但我个人不喜欢这种方法.如果主目录中出现新内容,则永远不会自动发出警告.理想情况下,你只需要在那里决定一次是否忽略它或保留它.我正在尝试使用干净的debian安装,但不可否认的是,那里已经存在相当多的问题.一个好的示例.gitignore文件/ home将是一个很好的资源,因为任何新的应该是你安装的新软件,在这种情况下,我至少希望看到它出现并决定我是否想在我的vcs中配置它. (4认同)
  • 新的`.git` 目录。由 `git init` 创建的与任何现有的用户特定配置冲突。通常在家庭目录中找到。? (2认同)

Pet*_*ete 20

我会设置一个别名只能用于你的家庭仓库,这样你可以使用别名代替git命令,你总是知道你正在使用的上下文

# .bashrc
alias home='git --work-tree=$HOME --git-dir=$HOME/.home'
Run Code Online (Sandbox Code Playgroud)

发出命令

$ home init
Run Code Online (Sandbox Code Playgroud)

将在您的$ HOME中的.home文件夹中创建一个repo,与当前目录无关,您可以使用别名'home'代替'git'来使用您的home repo

这与.gitignore一起应该是您所需要的.

# .gitignore
*
# keep track
!.bashrc
!.gitignore
Run Code Online (Sandbox Code Playgroud)

NB.请勿在回购中保留.ssh/keys,因为它会显示文件权限和安全问题.

  • 这是一个很棒的解决方案; 谢谢!我唯一的改变是不使用`.gitignore`而是使用`$ GIT_DIR/info/exclude`(所以,`$ HOME/.home/info/exclude`).我也更喜欢`$ HOME/.home.git`等,但这主要是多余的,手头有这个别名. (3认同)
  • 只是好奇,如果我在机器 A 上实现这个解决方案并在机器 B 上克隆 repo,git 会覆盖 B 上主目录中的现有文件吗? (2认同)

Mik*_*icz 12

我建议不要将你的$ HOME目录放在git版本控制之下.我做到了这一点,因为我认为我非常聪明,并希望我的.dotfiles受版本控制.然而,git是贪婪和贪婪的.我不得不在我的$ HOME/.gitignore中添加大量目录(甚至*).你的主目录中的其他地方有任何git存储库吗?我做到了.但是那些git存储库将使用你的$ HOME/.gitignore作为你的全局.gitignore,除非你在其他地方设置它.因此,尝试在这些子目录存储库中添加文件真的很痛苦.

而是将您的重要文件放在一个单独的目录中.说,〜/ dotfiles.现在将它作为一个git存储库,并将所有重要的.dot文件符号链接到指向该新存储库.瞧.问题解决了,虽然有一些时间投入到链接.


Leo*_*sov 8

我想你正在寻找dotfiles.

  • 使用.gitignore文件似乎现在更适合我的用例,但感谢您指出这一点! (2认同)