【问题标题】:Git tracking dotfiles (example: .zshrc)Git 跟踪点文件(例如:.zshrc)
【发布时间】:2014-10-01 00:12:43
【问题描述】:

在我的 Mac 根目录下,我有我的 .bashrc、.aliases、.zshrc...,然后在另一个文件夹中,我有一个相同点文件的 git 存储库。当我更新根目录时,我也会(手动)更新 git repo。有没有办法将根文件夹中实际实现的点文件“链接”到 git repo,这样我只需要处理一个更改?

【问题讨论】:

    标签: git bash zsh


    【解决方案1】:

    symbolic link 呢?

    只需删除根目录中的文件,然后将它们重新创建为

    ln -s /physical/path/to/file /symbolic/link/path
    

    例如,如果您有文件 /git/.aliases,ln -s /git/.aliases /root/.aliases 将在 root 文件夹中创建一个名为 .aliases 的符号链接。从此时起,无论您修改哪个文件(/git/root),都会同时修改另一个文件。

    查看this link,了解有关符号链接和 Mac 的更多详细信息。

    请原谅我的随机路径,我不是 Mac 用户。

    【讨论】:

      【解决方案2】:

      您实际上可以使用ln“链接”这些文件。您可以使用符号链接 (-s) 或硬链接。如果您使用 UNIX(如系统),您应该了解链接。

      符号链接是包含路径(相对或绝对)的基本特殊文件,系统会将它们视为该路径上的文件(这意味着符号链接可能会损坏)。

      硬链接(由ln 创建,没有-s 标志)仅限于单个文件系统,硬链接只是与原始文件相同的字节块的名称。硬链接与原始文件无法区分。实际上,文件只是计数为 1 的硬链接(=inode 的名称)。(ls -l 列表中的第二列显示给定文件的文件系统上存在的硬链接(名称)的数量。)

      我还把我的点文件放在了一个 repo 中。在我的回购中。我在名为payload 的目录中有点文件,我的仓库还包含一个将payload 中的dotfiles 链接到我的主目录的脚本。

      脚本如下:

          #!/bin/bash
          shopt -s dotglob #make globbing catch dotfiles too
          #Use -f (force) to overwrite targets
          for file in payload/*; do ln -s .${PWD/$HOME/}/$file $HOME/; done #use string substitution
      

      编辑 我发现在链接中获取相对路径的一种更简单的方法是使用-r 选项到ln

          for file in payload/*; do ln -s -r $file $HOME/; done 
      

      您还可以使用ln 的第三种形式一次创建多个链接(请参阅man ln):

          ln -s -r payload/* $HOME/
      

      对于硬链接版本,您可以这样做:

       #!/bin/bash
       shopt -s dotglob #make globbing catch dotfiles too
       ln payload/* $HOME/ 
      

      (此硬链接版本不会因移动和重命名而损坏,但您的 repo 必须位于同一文件系统上)

      (所有这些都假设您在payload/ 中只有文件(而不是目录),并且您的链接应该与其目标具有相同的名称。)

      有更复杂的程序以更强大的方式执行此操作。

      【讨论】:

      【解决方案3】:

      我通常为此使用符号链接,例如:

      mkdir ~/.dotfiles
      mv ~/.zshrc ~/.dotfiles
      ln -s ~/.dotfiles/.zshrc ~/.zshrc
      cd ~/.dotfiles ; git init ; ...etc...
      

      ..这样实际打开的文件是您的 ~/.dotfiles 目录中受版本控制的文件。

      另一种选择是使用特定于应用程序的“包含”功能,例如:

      • 将您的“标准”配置放入~/.dotfiles/.zshrc
      • ~/.zshrc获取该文件:

        [ -e ~/.dotfiles/.zshrc ] && . ~/.dotfiles/.zshrc
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 2017-03-15
        • 2017-04-24
        • 2017-08-04
        • 2012-06-01
        相关资源
        最近更新 更多