如何从远程Git repo获取所有文件及其SHA1的列表?
我试图弄清楚如何在远程Git存储库中获得所有文件及其SHA1的列表 有一种方法可以通过本地回购来实现,其命令是:如何从远程Git repo获取所有文件及其SHA1的列表?,git,list,file,sha1,Git,List,File,Sha1,我试图弄清楚如何在远程Git存储库中获得所有文件及其SHA1的列表 有一种方法可以通过本地回购来实现,其命令是: git ls-files * -s 返回以下内容(在示例中): 但这里的问题是,您必须执行完整克隆,并提前下载所有信息。这在远程存储库的裸克隆上不起作用 有什么线索吗?我不太确定这是否就是你要找的。。但是,为了能够获得有关远程存储库的任何信息,您需要从中获取。从远程存储库获取时,有关其分支的所有信息都将下载到本地副本。因此,您可以轻松地签出远程分支(git checkout ori
git ls-files * -s
返回以下内容(在示例中):
但这里的问题是,您必须执行完整克隆,并提前下载所有信息。这在远程存储库的裸克隆上不起作用
有什么线索吗?我不太确定这是否就是你要找的。。但是,为了能够获得有关远程存储库的任何信息,您需要从中获取。从远程存储库获取时,有关其分支的所有信息都将下载到本地副本。因此,您可以轻松地签出远程分支(
git checkout origin/master
),并使用ls files
命令。因此答案如下(我已经找到):
这些步骤假设您的git repo是通过HTTP访问设置的,其中的更新服务器信息命令设置为post接收挂钩(可能还有其他内容,因为我使用的是github.com设置的git repo)。HTTP也可以是HTTPS
- HTTP GET/info/refs
此文件将包含以下内容:
4462ced0a4be2135c009ba6224c2191c7a3f844a refs/heads/master
- HTTP GET/objects/44/62ed0a4be2135c009ba6224c219c7a3f844a
- 使用zlib解压缩此文件
此文件将包含以下内容:
commit 219 tree 0d4f34f97d76e54666751a850e9300e8b23c1adb parent fca1c898e2b4a43c66f211bd3547dc301511721d author yourname <yourname@email.com> 1295905469 -0800 committer yourname <yourname@email.com> 1295905469 -0800 added a/a.txt.
这里有一个单独文件的内容(您一直跟踪谁的路径,以及您从前面的树列表中知道谁的名字)。此文件以某些元信息作为前缀,在本例中为:Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 74 72 65 65 20 39 35 00 31 30 30 36 34 34 20 32 tree 95.100644 2 00000010 2E 74 78 74 00 1F D1 48 91 80 32 74 3B 3B 79 DB .txt..ÑH‘€2t;;yÛ 00000020 57 3C 63 A5 D4 53 08 98 08 31 30 30 36 34 34 20 W<c¥ÔS.˜.100644 00000030 52 45 41 44 4D 45 00 FF 80 47 81 C4 74 A0 6B D0 README.ÿ€G.Ät kÐ 00000040 55 99 5E 48 C3 07 99 BC 6A B6 5A 34 30 30 30 30 U™^HÃ.™¼j¶Z40000 00000050 20 61 00 1A 60 2D 9B D0 7C E5 27 2D DA A6 4E 21 a..`-›Ð|å'-Ú¦N! 00000060 DA 12 DB CA 2B 8C 9F Ú.ÛÊ+ŒŸ
blob 6<NULL><file content>
blob6
注意:如果所需文件位于repo根目录的子目录中,则树对象文件中的条目将具有树的对象类型id(在本例中显示为040000)。您可以获取该树对象的SHA1,HTTP获取该对象,然后解压缩它,查看内容,并重复该过程,直到您深入到所需的文件,然后使用它的SHA1获取文件内容(就像在上一步中一样),然后就可以了。是的,我希望在不克隆或获取的情况下执行此操作。这是不可能的。这不是DVC的工作方式。您无法在远程服务器上执行操作;那么你需要在特定的服务器上本地完成这项工作。我确信,通过git抓取要比这种HTTP请求垃圾邮件更高效、更快……对于我正在使用的系统(不是机器,而是系统),它实际上可能更慢。但很高兴终于知道,列出存储库的内容和从该存储库请求单个文件都是可能的(尽管其他人一直说这是不可能的)。
tree<space>##<NULL><object type id><space><filename><NULL><SHA1>
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 62 6C 6F 62 20 36 00 61 64 73 66 0A 32 blob 6.adsf.2
blob 6<NULL><file content>