如果我添加 1 个文件,则只有 1 个文件在该提交中,也就是我们添加了一些新内容,现在它已经一成不变
有几种方便的方法可以将单文件提交添加到裸仓库中主分支的尖端。
所以看起来我需要创建一个 blob 对象,将它附加到一棵树,然后将该树对象附加到一个提交。
提交任何事情的所有方法都归结为这样做,这只是便利命令是否适合您的目的的问题。git add创建一个 blob 并在索引中为其创建一个条目;git commit执行 agit write-tree为索引中的内容添加任何新树,并git commit-tree添加顶级结果树的提交,并git update-ref保持HEAD最新。裸存储库确实有一个HEAD提交,通常附加到(也称为符号引用)像master,的分支。. .
所以 git 的便利命令已经几乎完全符合你的要求。尤其是只有一个文件时,这将非常容易。
例如,您的文件出现在 中~server/data/logs/,您用于分发的裸仓库位于~server/repo.git,您希望提交的文件data/logs位于仓库中,并且您始终希望提交最新的日志文件:
#!/bin/sh
cd ~server
# supply locations git ordinarily does on its own in working i.e. non-bare repos:
export GIT_DIR=$PWD/repo.git # bare repos don't have defaults for these
export GIT_WORK_TREE=$PWD # so supply some to suit our purpose
export GIT_INDEX_FILE=$GIT_DIR/scratch-index # ...
# payload: commit (only) the latest file in data/logs:
git read-tree --empty # make the index all pretty, and
git add data/logs/`ls -1t data/logs|sed q` # everything's ordinary from here - add and
git commit -m'new logfile' # commit
Run Code Online (Sandbox Code Playgroud)
git read-tree从提交的树中加载索引条目。这是结帐、合并和重置的基础,可能还有一些我忘记了 atm。在这里,我们只想要一个空索引开始,因此--empty.
使用推/拉/远程同步数据,同时使用每台机器上已有的工具
随着时间的推移,您说“数百万”文件,如果您不想分发完整的历史记录,rsync据我所知,您已经怀疑可能是更好的选择。但是——一次一个,每分钟一个新文件,累积一百万需要两年时间。所以, ?
无论如何,上述过程可以非常有效地扩展到每次提交的任何少量文件。对于批量工作,有更好的方法。
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |