Git拉取指定文件或者文件夹的实现方式

作者:

文章目录
  • 在进行项目开发的时候,有时候会有这样的需求那就是: 我们只希望从Git仓库里取指定的文件或者文件夹出来。在SVN里面,这非常容易实现,因为SVN基于文件方式存储,而Git却是基于元数据方式分布式存储文件信息的,它会在每一次Clone的时候将所有信息都取回到本地,即相当于在你的机器上生成一个克隆版的版本库。因此在Git1.7.0以前,这无法实现,但是幸运的是在Git1.7.0以后加入了Sparse Checkout模式,这使得Check Out指定文件或者文件夹成为可能。 仓库只有一个的情况下,只想拉取某个目录文件;其他文件没用到的会很浪费时间; 关键:git的sparse checkout模式
  • github.io “Sparse checkout” 允许稀疏地填充工作目录。它使用 skip-worktree 位(参见git-update-index(1))告诉 Git 工作目录上的文件是否值得查看。 “git read-tree”和其他基于合并的命令(“git merge”、“git checkout”……)可以帮助维护跳过工作树位图和工作目录更新。$GIT_DIR/info/sparse-checkout用于定义跳过工作树参考位图。当“git read-tree”需要更新工作目录时,它会根据这个文件重新设置索引中的skip-worktree位,它使用与.gitignore文件相同的语法。如果条目与此文件中的模式匹配,则会在该条目上设置 skip-worktree。否则 skip-worktree 将被取消设置。 然后它将新的跳过工作树值与前一个值进行比较。如果 skip-worktree 从 unset 变为 set,它将添加相应的文件。如果它从设置变为未设置,则该文件将被删除。 虽然$GIT_DIR/info/sparse-checkout通常用于指定哪些文件在其中。您还可以使用否定模式指定哪些文件不在其中。 例如,要删除“不需要的”文件: * !不需要的 另一个棘手的事情是当您不再需要sparse checkout完全重新填充工作目录。 您不能只禁用“sparse_checkout”,因为 skip-worktree 仍在索引中,并且您的工作目录仍然很少填充。 您应该使用$GIT_DIR/info/sparse-checkout文件内容重新填充工作目录,如下所示: * 然后您可以禁用Sparse_checkout。默认禁用“git read-tree”和类似命令中的Sparse checkout支持。 您需要打开core.sparseCheckout以获得Sparse checkout支持 大致步骤:
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: Git子模块拉取操作的完整指南 Git拉取代码报无权限错误的正确处理方案 Git拉取代码的六种高效方式 如何解决Git拉取合并代码流程和多人协同开发问题 使用IDEA如何拉取GitLab项目
  • 目录
    • Git拉取指定文件或者文件夹
    • 理论
      • 1.本地新建文件夹或者执行命令
      • 2.目录初始化
      • 3.设置远程仓库地址(将本地仓库关联到远程仓库)
      • 4.设置sparse checkout模式(稀疏检出),允许克隆子目录
      • 5.设置指定拉取的目录( *是通配符,!是反选;例如 clients/ 表示clients目录下所有)
      • 6.拉取
      • 7.删除本地仓库(.git文件就不在了)
      • 8.track本地远程相同命名
      • 9.fetch本地自定义命名
      • 10.git回退版本
    • 总结

      在进行项目开发的时候,有时候会有这样的需求那就是:

      我们只希望从Git仓库里取指定的文件或者文件夹出来。在SVN里面,这非常容易实现,因为SVN基于文件方式存储,而Git却是基于元数据方式分布式存储文件信息的,它会在每一次Clone的时候将所有信息都取回到本地,即相当于在你的机器上生成一个克隆版的版本库。因此在Git1.7.0以前,这无法实现,但是幸运的是在Git1.7.0以后加入了Sparse Checkout模式,这使得Check Out指定文件或者文件夹成为可能。

      仓库只有一个的情况下,只想拉取某个目录文件;其他文件没用到的会很浪费时间;

      关键:git的sparse checkout模式

      github.io

      “Sparse checkout” 允许稀疏地填充工作目录。它使用 skip-worktree 位(参见git-update-index(1))告诉 Git 工作目录上的文件是否值得查看。

      git read-tree”和其他基于合并的命令(“git merge”、“git checkout”……)可以帮助维护跳过工作树位图和工作目录更新。$GIT_DIR/info/sparse-checkout用于定义跳过工作树参考位图。当“git read-tree”需要更新工作目录时,它会根据这个文件重新设置索引中的skip-worktree位,它使用与.gitignore文件相同的语法。如果条目与此文件中的模式匹配,则会在该条目上设置 skip-worktree。否则 skip-worktree 将被取消设置。

      然后它将新的跳过工作树值与前一个值进行比较。如果 skip-worktree 从 unset 变为 set,它将添加相应的文件。如果它从设置变为未设置,则该文件将被删除。

      虽然$GIT_DIR/info/sparse-checkout通常用于指定哪些文件在其中。您还可以使用否定模式指定哪些文件不在其中。

      例如,要删除“不需要的”文件:

      * 
      !不需要的
      

      另一个棘手的事情是当您不再需要sparse checkout完全重新填充工作目录。

      您不能只禁用“sparse_checkout”,因为 skip-worktree 仍在索引中,并且您的工作目录仍然很少填充。

      您应该使用$GIT_DIR/info/sparse-checkout文件内容重新填充工作目录,如下所示:

      *
      

      然后您可以禁用Sparse_checkout。默认禁用“git read-tree”和类似命令中的Sparse checkout支持。

      您需要打开core.sparseCheckout以获得Sparse checkout支持

      大致步骤:

      mkdir project && cd project
      

      git init
      

      git remote add -f origin <origin_url>
      

      git config core.sparsecheckout true		//config:参数是用来配置git环境的
      # 上面的代码会帮助我们创建一个空的本地仓库,同时将远程Git Server URL加入到Git Config文件中。
      

      echo 你要的文件名/目录 >> .git/info/sparse-checkout
      

      git pull origin master
      # 解释
      push:将本地仓库与远程仓库合并
      -u:将本地仓库分支与远程仓库分支一起合并,就是说将master的分支也提交上去,这样你就可以在远程仓库上看到你在本地仓库的master中创建了多少分支。
      不加这个参数只将当前的master与远程的合并,没有分支的历史记录,也不能切换分支
      origin:远程仓库的意思,如果这个仓库是远程的那么必须使用这个选项
      master:提交本地matser分支仓库
      

      注意: fatal: Couldn’t find remote ref master;

      表示主线名称不是master,可以通过分支命令查看git branch -a
      git branch -a
      remotes/origin/main
      根据上面提示,主线名称是main,则执行
      git pull origin main
      

       rm -rf .git
      

      如果远程新建了一个分支,本地没有该分支。

      可以利用 git checkout --track origin/branch_name ,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。

      git的本地分支关联远程分支(remtotes/origin/news为远程分支名称)

      git branch --set-upstream-to remotes/origin/news
      

      例如:将gitLab 上的dev分支拉取到本地

      • 与远程仓库建立连接:git remote add origin XXXXX.git
      • 使用git branch 查看本地是否具有dev分支
      • 如果没有 git fetch origin dev
      • git checkout -b dev origin/dev在本地创建分支dev并切换到该分支
      • git pull origin dev就可以把gitLab上dev分支上的内容都拉取到本地了

      git log q					退出查看
      git reset --hard XXXX 		加上目标版本号命令将版本回退
      git push -f -u origin XXX 	提交到指定分支
      

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

      您可能感兴趣的文章:

      • Git子模块拉取操作的完整指南
      • Git拉取代码报无权限错误的正确处理方案
      • Git拉取代码的六种高效方式
      • 如何解决Git拉取合并代码流程和多人协同开发问题
      • 使用IDEA如何拉取GitLab项目

      站内搜索