5

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

有没有办法(使用 git、mercurial 或任何 VCS)在不存储整个操作系统的情况下跟踪更改?

这是我想象的:

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

可能的?不可能的?变通办法?

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

4

4 回答 4

4

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

于 2012-05-26T03:57:17.050 回答
1

您想要的是git update-index --info-only... --index-info,从手册页:“--info-only 用于注册文件而不将它们放置在对象数据库中。这对于仅状态存储库很有用。”。 --index-info是它的工业规模表亲。

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

要获取对象名称,请使用git hash-objectfilename.

于 2012-05-26T09:13:31.273 回答
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 中的所有更改

如果你想在一个 repo 中跟踪多个 /etc,那么你可以简单地在文件系统的根目录下进行,除了在 /.gitignore 中添加正确的忽略路径。我不清楚在 git 中使用 git 的影响,因此在这种情况下您可能需要格外小心。

于 2012-05-26T03:51:06.190 回答
0

我知道这个问题很老,但我认为这可能会对某人有所帮助。受@Jonathon 关于如何记录特定文件的具体修改问题的评论的启发,我创建了一个 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.  
于 2017-11-14T19:59:30.683 回答