如何使用git跟踪我的Linux发行版的更改?

时间:2012-05-26 03:43:52

标签: linux git mercurial debian dvcs

我正在尝试一些Linux配置,我想跟踪我的更改?当然我不想把我的整个操作系统置于版本控制之下?

有没有办法(使用git,mercurial或任何VCS)跟踪更改而不存储整个操作系统?

这就是我的想象:

  1. 我做了一种git init - >存储所有文件的所有哈希值,但不存储文件的内容
  2. 我对文件系统进行了一些更改 - > git检测到此文件的哈希值已更改
  3. 我承诺 - >存储文件的内容(甚至更好地存储原始文件和差异!我知道,这是不可能的......)
  4. 可能?不可能?变通?

    编辑:我关心的只是最小化存储库的大小并且只有一个包含我的更改的存储库。将我的存储库中的所有文件与我无关。例如,如果我推送到github,我只希望它只包含已更改的文件。

4 个答案:

答案 0 :(得分:4)

看看etckeeper,它可能会完成这项工作。

答案 1 :(得分:1)

你想要的是git update-index --info-only... --index-info,来自手册页:“ - info-only用于注册文件而不将它们放在对象数据库中。这对于仅限状态非常有用库。“ --index-info是其工业规模的表亲。

对要跟踪的文件执行此操作,write-tree将索引结构写入对象db,commit-tree表示,update-ref更新分支。

要获取对象名称,请使用git hash-object filename

答案 2 :(得分:0)

这是我们做的......

su -
cd /etc
echo "*.cache" > .gitignore
git init
chmod 700 .git
cd /etc; git add . && git add -u && git commit -m "Daily Commit"

然后设置crontab:

su -
crontab -e

# Put the following in:
0 3 * * *   cd /etc; git add . && git add -u && git commit -m "Daily Commit"

现在,您将每晚提交/ etc

中的所有更改

如果你想在一个仓库中追踪超过/ etc,那么你可以在你的文件系统的根目录下执行它,除了在/.gitignore中添加正确的忽略路径。我不清楚在git中使用git的影响,所以在这种情况下你可能需要格外小心。

答案 3 :(得分:0)

我知道这个问题很老,但我认为这可能对某人有所帮助。受@ Jonathon对How to record concrete modification of specific files问题的评论的启发,我创建了一个shell脚本,使您能够监视对特定文件所做的所有更改,同时保留所有更改历史记录。该脚本取决于正在安装的inotifywait和git包。

您可以在此处找到该脚本 https://github.com/hisham-hassan/linux-file-monitor

Usage: file-monitor.sh [-f|--file] <absolute-file-path> [-m|--monitor|-h|--history]  
       file-monitor.sh --help  

 -f,--file <absolute-file-path> Adding a file to the monitored files List. The <absolute-file-path>  
                                is the absolute file path of the file we need to action.  
                                PLEASE NOTE: Relative file path could cause issues in the script,  
                                please make sure to use the abolute path of the file. also try to   
                                avoid sym links, as it has not been tested.  
                                example: file-monitor.sh -f /absolute/path/to/file/test.txt -m  
 -m, --monitor                  Monitoring all the changes on the file. the monitoring will keep  
                                happening as long as the script is running; you may need to run it  
                                in the background.  
                                example: file-monitor.sh -f /absolute/path/to/file/test.txt -m  
 -h, --history                  showing the full history of the file.  
                                To exit, press "q"  
                                example: file-monitor.sh -f /absolute/path/to/file/test.txt -h  
 --uninstall                    uninstalls the script from the bin direcotry,  
                                and removes the monitoring history.  
 --install                      Adds the script to the bin directory, and creates  
                                the directories and files needed for monitoring.  
 --help                         Prints this help message.