在 / (root) 处创建 Git 存储库以跟踪设置?

Abh*_*kar 30 root settings git

所以我主要将 Git 用于开发目的,但我刚刚意识到我可以用它来存储我在 Ubuntu 安装上的设置文件的版本。

我建议的设置是:

  • git init 回购在 /

  • 添加一个.gitignoreat/忽略除我要跟踪的特定设置之外的任何文件。

    例如,.gitignore可以包含():

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
    Run Code Online (Sandbox Code Playgroud)
  • 每当我更改这些低级设置时,我都可以跟踪它们。

这个设置有什么问题吗?内核是否总是/只需要某些文件夹?它会破坏任何应用程序的功能吗?

Rav*_*ina 39

您的两个问题的答案是否定的,您可以在/. 我猜唯一可能发生的事情是一些空间路径的许可问题。

但是最好将.git目录存储在其他地方,如下所示:

git --git-dir=/home/user/backup-root --work-tree=/
Run Code Online (Sandbox Code Playgroud)

在这里阅读。

  • 非常有趣,我实际上不知道您可以在 git 中执行此操作!谢谢你的建议。 (5认同)

Bas*_*tch 19

实际上,您可能想要版本控制配置文件 in /etc/(您不关心根目录的条目/,特别是像procorusrbinin/这样的目录),因此您可能想要安装etckeeper

您还可以对某些选定的子目录进行版本控制(就像/usr/share/applications/您提到的那样)。

但是,不要弄乱 Ubuntu包管理系统。也许您最应该备份已安装软件包的当前列表。


gda*_*hlm 6

在 / 中有一个 git repo 工作正常,除了当你有一个较低级别的 git repo 时很难注意到问题,因为它会回答所有问题。

注意:使用'debsums'工作量更少,可能更有用

sudo apt-get install debsums
Run Code Online (Sandbox Code Playgroud)

这将使您能够快速检测二进制文件或配置文件中的(大多数)更改。

此处安装的软件包的示例是与上游软件包不同的软件包。

$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式获取更改的配置文件列表:

$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
 /etc/libvirt/libvirt.conf
 <snip>
Run Code Online (Sandbox Code Playgroud)

请注意chromium-browser 是如何打包不当的,并且在包文件列表中列出了一个不存在的文件。

/var/lib/dpkg/info/chromium-browser.list
Run Code Online (Sandbox Code Playgroud)

这会使用 dpkg 数据并避免大型 /.git 目录和工作流。

  • 我相信@abhidivekar OP 是说,当你在 `/home/$USER` 中创建另一个 git repo 时,`/` 中的 `.git` 将回答为 `/home$USER` 中的 repo 给出的任何 git 命令,而不是比`/home/$USER`中的[`.gir`文件]... (2认同)
  • @abhidivekar 正确,如果收益大于问题,这不是问题,但这是意外行为。不是拦截器,只是一个警告。 (2认同)

Abh*_*kar 5

所以我一直在探索其他答案,我找到了一个对我有用的程序:

  • 做一个.gitignore/。这比我想象的要复杂得多,因为 Git 处理子文件夹中的白名单文件的方式。我用这个这个链接来帮助我。

    ## Source: /sf/answers/2095262291/
    ## Comments are on new lines because trailing whitespace matters in Git (stackoverflow.com/a/8865858/4900327)
    
    # Blacklist all files, folders and subfolders in the same directory as the .gitignore file.
    /*
    # Do not blacklist the .gitignore file.
    !.gitignore
    
    # Now whitelist certain files.
    # For files in subfolders, some hoops must be jumped through (stackoverflow.com/a/16318111/4900327):
    
    ## Whitelisting files in /etc/ folder:
    # Whitelist the /etc/ folder (the git repo folder is whitelisted always)
    !/etc/
    # Blacklist all files in /etc/ folder.
    /etc/*
    # Whitelist specific file(s) in /etc/ folder.
    !/etc/crontab
    
    
    ## Whitelisting files in /etc/default/ folder:
    # /etc/ is already whitelisted, and its contents blacklisted.
    # Whitelist /etc/default/ folder.
    !/etc/default/
    # Blacklist all files in /etc/default/ folder.
    /etc/default/*
    # Whitelist specific file(s) in /etc/default/ folder.
    !/etc/default/tlp
    
    
    ## Whitelisting files in /home/USERNAME/ folder:
    # Whitelist /home/ folder.
    !/home/
    # Blacklist all files in /home/ folder.
    /home/*
    # Whitelist /home/USERNAME/ folder.
    !/home/USERNAME/
    # Blacklist all files in /home/USERNAME/ folder.
    /home/USERNAME/*
    # Whitelist specific file(s) in /home/USERNAME/ folder
    !/home/USERNAME/.bash_profile
    !/home/USERNAME/.bashrc
    
    Run Code Online (Sandbox Code Playgroud)
  • 转到/并运行git init .到目前为止,我无法.git/使用@Ravexina 提到链接将该文件夹存储在另一个目录

  • 运行git add .git status。您应该获得 Git 正在跟踪的所有设置文件的列表。

    If you used the above `.gitignore`, it should track `/etc/crontab`, `/etc/default/tlp`, `/home/USERNAME/.bash_profile`, and `/home/USERNAME/.bashrc`.
    
    Run Code Online (Sandbox Code Playgroud)
  • git commit -m "Initial settings files".

  • 您可以使用git log -p -- path/to/file或跟踪更改gitk path/to/file。关于这个的更多讨论在这里