即时读取裸仓库文件
Read bare repo files on the fly
有没有办法读取裸仓库的文件?例如,我想分析每个文件并从存储库中提取一些特性,但不在本地检查整个存储库。
P.S: 理想情况下,想为此使用 C#
谢谢
不完全清楚你想做什么,但有两种主要方法可以直接从裸存储库中提取数据:
使用git cat-file -p
提取对象数据。
这种方法简单易行,但有一个不明显的缺点:没有 .gitattributes
样式过滤发生。 (明显的缺点是您必须命名对象而不能使用 OS 例程在文件系统中查找它们。但是,git cat-file
使用所有通常的 git rev-parse
规则,所以如果您知道分支的名称和文件的路径,您可以简单地 git cat-file -p branch:path/to/file
。)
提供工作树。
例如,git --work-tree=/some/where checkout branch
甚至可以使用裸存储库:--work-tree
提供工作树的顶层。这里的一个(或两个取决于您如何计算)不明显的缺点 is/are 检出特定提交会修改裸存储库的索引和 HEAD
(当前分支/提交)。指数本身可能会或可能不会以任何其他方式使用;如果不是,这不是问题,如果是,您可能需要使用备用索引(通过环境变量 GIT_INDEX_FILE
)。 HEAD
被新的 git clone
操作隐式使用(如果这个特定的裸克隆被用作其他克隆的源)。
有没有办法读取裸仓库的文件?例如,我想分析每个文件并从存储库中提取一些特性,但不在本地检查整个存储库。
P.S: 理想情况下,想为此使用 C#
谢谢
不完全清楚你想做什么,但有两种主要方法可以直接从裸存储库中提取数据:
使用
git cat-file -p
提取对象数据。这种方法简单易行,但有一个不明显的缺点:没有
.gitattributes
样式过滤发生。 (明显的缺点是您必须命名对象而不能使用 OS 例程在文件系统中查找它们。但是,git cat-file
使用所有通常的git rev-parse
规则,所以如果您知道分支的名称和文件的路径,您可以简单地git cat-file -p branch:path/to/file
。)提供工作树。
例如,
git --work-tree=/some/where checkout branch
甚至可以使用裸存储库:--work-tree
提供工作树的顶层。这里的一个(或两个取决于您如何计算)不明显的缺点 is/are 检出特定提交会修改裸存储库的索引和HEAD
(当前分支/提交)。指数本身可能会或可能不会以任何其他方式使用;如果不是,这不是问题,如果是,您可能需要使用备用索引(通过环境变量GIT_INDEX_FILE
)。HEAD
被新的git clone
操作隐式使用(如果这个特定的裸克隆被用作其他克隆的源)。