bash - git 稀疏结帐(文件夹)有问题
问题描述
这是我的 git 服务器树:
----a/
|--b/
|--c/
|--d/
|--e/
|--f/
|--g.txt
|--h.readme
这是我的 git 版本树
---------------->master
|---->myBranch [files are up to date here]
这是我的詹金斯服务器树
-----A/
|--B/
|--C/
我正在尝试检查存储库“B”中存储库“e”的内容我只需要我正在处理的当前分支的最后一个版本,我不想提交,只是为了获得一些最新信息要运行的日期只读脚本,所以depth 1
我猜是可以的。
无论如何,我面临的问题是我能够进行稀疏结帐
#############################
##### 1/ configuring local folder
#############################
git init
git config core.sparseCheckout true
#an empty repository with the remote is created:
git remote add -f origin ssh://guillaumedg@domain.com:port/myProjects/thisProject.git
#add repository "e" to be checked out:
echo e/*> .git/info/sparse-checkout
#############################
##### 2/ fetching/updating files
#############################
git fetch
git checkout myBranch
我知道我很接近,但我得到的是:
-----A/
|--B/
| |----a/
| |--d/
| |--e/
| |--f/
| |--g.txt
| |--h.readme
|--C/
不是这个(这是我想要的)
-----A/
|--B/
| |--f/
| |--g.txt
| |--h.readme
|--C/
任何提示?
顺便说一句,我尝试了将“深度 1”用于“步骤 2”的不同方法,但没有成功:
git fetch --depth 1 $(url) $(branch)
git checkout $(branch)
--> 错误:pathspec 'myBranch' 与 git 已知的任何文件都不匹配。
git fetch --depth 1 $(url) $(branch)
git checkout
--> 致命的:你在一个尚未出生的分支上
git fetch --depth 1 $(url) $(branch)
git checkout -b $(branch)
致命:一个名为“myBranch”的分支已经存在。
git fetch
git checkout $(branch)
--> 如上所述工作
解决方案
Git 不存储目录,只存储文件。因此,鉴于您的图纸:
----a/ |--b/ |--c/ |--d/ |--e/ |--f/ |--g.txt |--h.readme
存储库有一些提交,其文件名为:
a/d/e/f/g.txt
和:
a/d/e/h.readme
您可以使用命令行选项或您尝试使用的稀疏检出选项指示您的 Git 检出这些特定文件。他们的名字仍然是a/d/e/f/g.txt
and a/d/e/h.readme
。
您的计算机可能需要通过创建一个名为 的目录(或文件夹)来创建这些名称a
,然后创建一个名为d
in的目录a
,依此类推。Git 会这样做。如果您要使用git checkout
它们来提取这些文件,则不能让 Git 为这些文件使用任何其他名称。1
因此,您可以选择不使用git checkout
来获取这些文件。例如,您可以获得提交(正如您已经在做的那样),然后git show
在单个路径名上使用。的标准输出git show
将显示文件的内容;您可以将其重定向到您选择的文件名。
由于您不想要整个存储库,请考虑使用git archive
将一个提交转换为存档。由于您也不想要整个提交,请考虑在此git archive
命令中添加您要归档的文件的名称。2 然后,您可能有一个取消归档程序,它可以跳过每个归档文件的a/d/
部分路径名。例如,GNU tar 有--strip-components
.
1我认为能够将存储的文件名重新映射到文件系统内的名称会很好,原因有很多,包括大小写折叠问题和厚脸皮的 Linux 程序员创建名为CON
和LPT
. :-) 但是 Git 不能,至少今天不能。
2这不是必需的,如果您git archive
从 GitHub 等托管服务器下载此类,您可能无法执行此操作。但如果你能做到这一点,你将节省一些空间和传输时间。例如,给定您的ssh://user@host
URL,您可能可以运行ssh user@host "cd path/to/repo; git archive ..."
并将结果通过管道传输到本地tar -xf -
。
推荐阅读
- javascript - 将 JS 注入 WKWebview
- javascript - 发送表单前的安全问题 - nodejs
- android - 如何从绝对路径获取内容 URI?
- c# - 数据表插入到sql server数据库的双记录
- ios - 'UIActivityIndicatorViewStyleWhiteLarge' 在 ios 13 中已弃用
- c++ - 无法通过 D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX 共享 D3D11_USAGE_STAGING 资源
- python - 为什么我无法在熊猫中获得正确的掩码列
- data-structures - 将平衡二叉树复制到具有最小旋转的 AVL 树的最佳“顺序”遍历
- robot - 通用机器人 TCP/IP 通信:无法发送 crlf ("\r\n")
- python - 尝试在指定路径中制作自复制文件