我正在寻找一种方法来查看git裸存储库上的文件,这些文件已由其他远程服务器更新,但没有在我的存储库中进行拉取。
我将尝试使用本地示例来描述我的疑问。
我创建一个文件夹,添加两个文件并创建一个新的存储库。
> mkdir stackOF && cd stackOF
> touch file1 file2
> git init
然后我从此仓库创建一个裸仓库。
> cd .. && git clone --bare stackOF stackOF.git
现在,我想创建该裸仓库的两个副本,并模拟太同事的一些动作。
> git clone stackOF.git stackOF.clone1
> git clone stackOF.git stackOF.clone2
首先,clone1
将创建一个文件,提交并推送更改。
> cd stackOF.clone1 && touch file_clone1
> git add . && git commit -m "File from clone 1."
> git push
第二,clone2
将创建一个文件并仅提交。
> cd ../stackOF.clone2 && touch file_clone2
> git add . && git commit -m "File from clone 2."
在这一点上,我开始对ls-tree
概念产生怀疑。执行下一个命令,我希望看到由clone1推送的文件,但是会收到以下消息:
> git ls-tree origin
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5392 file1
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5392 file2
我想在裸仓库目录中收到类似执行ls-tree命令的结果:
> cd ../stackOF.git
> git ls-tree master
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5392 file1
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5392 file2
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5392 file_clone1
在研究这种情况下,我找到了一个命令,该命令向我显示了我想要的内容,但还包含许多其他信息。因此,返回到clone2
并执行以下命令:
> cd ../stackOF.clone2
> git archive -v --remote=file:///f/gits/stackOF.git master
pax_global_header00006660000000000000000000000064133246307500014515gustar00rootroot0000000000000052 comment=0085439d6a07481e6a21db545edd3f7960c038e2
file1000066400000000000000000000000001332463075000117720ustar00rootroot00000000000000file2000066400000000000000000000000001332463075000117730ustar00rootroot00000000000000file_clone1000066400000000000000000000000001332463075000131520ustar00rootroot00000000000000remote: file1
remote: file2
remote: file_clone1
总结一下,我位于clone2
存储库中,无需进行任何查找即可查找裸存储库中的哪些文件。但是我想要更干净的东西,例如在裸仓库中使用ls_tree
。