git 拉取项目指定目录或者指定文件

文章介绍了如何通过Git的sparsecheckout功能,从Gitlab项目中只拉取/bm-server-biz/docs目录下的表更新sql文件。步骤包括初始化Git仓库,启用sparsecheckout,指定拉取内容,以及执行gitpull命令。这种方法有助于减少不必要的数据下载,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为要做数据库自动更新,需要拉取Gitlab项目中/bm-server-biz/docs目录下的表更新sql文件,其他的都不需要,这时候可以利用git的“sparse checkout”方法(设置稀疏检出)来实现。

1、在项目目录下git 初始化

[root@xcc-demo-113-160 lsntest]# git init
已初始化空的 Git 仓库于 /home/lsntest/.git/
[root@xcc-demo-113-160 lsntest]# ls
[root@xcc-demo-113-160 lsntest]# ls -a
.  ..  .git

 2、修改.git文件夹里面的 config 文件 .git/config ,启用 sparse checkout(稀疏检出)

[root@xcc-demo-113-160 .git]# cat config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
        sparsecheckout = true
[remote "origin"]
        url = http://git.xxxxx.com/xxxx/xxxx.git
        fetch = +refs/heads/*:refs/remotes/origin/*

3、在 .git/info 创建 sparse-checkout 文件,在文件里面指定需要拉取的目录或内容

[root@xcc-demo-113-160 info]# cat sparse-checkout 
/bm-server-biz/docs/表变更update.sql

4、开始拉取 git pull (第一次需要输入账号密码)

[root@xcc-demo-113-160 lsntest]# git pull
remote: Enumerating objects: 106, done.
remote: Counting objects: 100% (106/106), done.
remote: Compressing objects: 100% (71/71), done.
remote: Total 4636 (delta 24), reused 90 (delta 19), pack-reused 4530
接收对象中: 100% (4636/4636), 351.05 MiB | 54.81 MiB/s, 完成.
处理 delta 中: 100% (2220/2220), 完成.
来自 git.bm.com:bm/bm-api-server
 * [新分支]          master     -> origin/master
 * [新分支]          bug_801    -> origin/bug_801
 * [新标签]          v0.1       -> v0.1

 或者通过bash执行命令:

git init

git config core.sparsecheckout true

git remote add origin 仓库地址

echo 文件目录 >> .git/info/sparse-checkout

git pull origin master

### Git Sparse Checkout 添加特定目录文件的方法 #### 基本概念 Git 自 1.7 版本起引入了稀疏检出(Sparse Checkout)的功能,允许开发者仅检出仓库中的部分目录文件到工作区。这不仅能够减少磁盘占用,还能提高工作效率。 #### 配置 Sparse Checkout 要启用 Sparse Checkout 功能并添加特定目录文件,需按照以下方式操作: 1. **初始化仓库** 如果尚未克隆远程仓库,则可以通过 `git init` 初始化一个新的本地仓库,并配置远程地址。 2. **启用 Sparse Checkout** 启用 Sparse Checkout 功能需要修改 `.git/config` 文件或将选项设置为 `true`: ```bash git config core.sparseCheckout true ``` 3. **定义稀疏检出路径** 创建或编辑 `.git/info/sparse-checkout` 文件,写入希望检出的路径模式。例如,如果只想检出某个子目录 `webprj` 或其下的某些文件,可以在该文件中输入对应的路径样式[^4]。 4. **数据** 执行以下命令以获远程分支的数据: ```bash git pull origin main --depth=1 ``` 这里使用 `--depth=1` 参数是为了浅克隆,进一步优化性能和存储需求。 #### 添加新的目录文件 当已经启用了 Sparse Checkout 并完成初始检出后,可以随时向现有列表中添加额外的目录文件。具体方法如下: - 使用 `git sparse-checkout add` 命令直接指定新目标路径。例如,若想新增另一个名为 `docs` 的目录至当前的工作树中,运行下面这条语句即可实现: ```bash git sparse-checkout add docs ``` - 若要移除某条记录或者调整现有的范围设定,则可通过编辑`.git/info/sparse-checkout` 文件手动更改相应的内容;也可以利用 `git sparse-checkout set` 来重新定义整个规则集[^2]。 #### 示例代码展示 以下是完整的流程演示,假设我们有一个大型项目结构如前所述 (`project1/webprj`) ,现在只需要同步其中一部分资源下来: ```bash # Step 1: Initialize a new repository and link it to the remote one. cd /path/to/local/folder/ git init git remote add origin https://github.com/example/repo.git # Step 2: Enable sparse checkout mode globally within this repo context. git config core.sparseCheckout true # Step 3: Define which parts of the project should be checked out locally by editing or creating '.git/info/sparse-checkout'. echo "webprj/" >> .git/info/sparse-checkout # Alternatively use 'add' command directly without manual file manipulation: # git sparse-checkout add webprj/ # Step 4: Fetch data from server according to defined rules above. git fetch origin main git checkout FETCH_HEAD ``` 上述脚本展示了如何针对单个子模块执行精简版下载过程的同时还提供了动态扩展其他组件的能力[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值