【问题标题】:git pull excluding some file?git pull 不包括某些文件?
【发布时间】:2021-02-04 10:09:59
【问题描述】:

我有一个公共存储库供我的学生使用,我在其中推送了一个大型数据集和一些更正。问题是我们现在这里有风暴,连接真的很差。此外,学生已经为练习目的自行下载了数据集。

我的问题,我想不出一个简单的解决方案:他们有没有办法在没有数据集的情况下提取 repo(仅针对那个时候),并且每当连接恢复时,在他们下一次拉取时,他们将能够拉动一切。

我在想 git fetch + git merge 只想要文件,但这并不是我想要的,因为理想情况下它应该是一个 git fetch + git merge 不包括一个文件夹(数据文件夹)。

希望我的问题足够清楚,并且有一个简单的解决方案! 感谢您的帮助

【问题讨论】:

    标签: git git-merge git-pull git-fetch


    【解决方案1】:

    Pull 就是 fetch + merge(或 fetch + rebase);是 fetch 步骤引入了新的 Git 对象。

    Fetch 在逐个提交 的基础上工作。如果对象是所需提交的一部分,您的学生将获得整个提交,或者根本没有获得提交。1 那么,诀窍是创建一些 新的和不同的提交,更容易获得并提供学生需要的东西。

    这样做:

    • 在添加了大型数据集的提交之前找到提交。这个提交有一些哈希 ID,$hash

    • 创建一个新的分支名称指向这个提交:

       git branch newbranch $hash
      

      根据需要从此处进行新提交,例如,向文件添加更正,但添加大型数据集。

    • 让你的学生获取这个分支

       git fetch origin newbranch
      

      然后检查这个新分支并在那里工作。

    • 稍后,当事情好的时候,将主分支与大数据合并到新分支中:

       git checkout newbranch; git merge mainbranch
      

      从这里开始继续使用新分支:您现在甚至可以完全删除旧的主分支。新分支现在是主分支。

    形象地说,我们正在做的就是这个。我们开始:

    ...--F--G--H--I--J   <-- main
    

    commit H 是我们关心的哈希值:在大数据被添加到 commit I 之前。提交J 可能存在也可能不存在:如果不存在,则提交I 是主分支上的最后一次提交。提交IJ 都包含大文件,因此如果有人去获取提交J 或提交I,他们将获得所有数据。所以我们添加一个新的 name 指向 commit H:

                 I--J   <-- main
                /
    ...--F--G--H   <-- newbranch
    

    现在我们从I 和/或J 获取我们想要的任何更新,并使用它们来更新一些文件并制作新的提交快照K

                 I--J   <-- main
                /
    ...--F--G--H------K   <-- newbranch
    

    提交K 没有大文件。通过避免获取IJ,没有人需要等待大文件。

    任何额外的工作都会增加更多的提交:

                 I--J   <-- main
                /
    ...--F--G--H--K--L   <-- newbranch
    

    这很好,最终我们将大文件带入git merge

                 I----J   <-- main
                /      \
    ...--F--G--H--K--L--M   <-- newbranch
    

    所以提交M 有大文件。我们现在删除名称main,因为它不再对任何人有用:

                 I----J
                /      \
    ...--F--G--H--K--L--M   <-- newbranch
    

    像往常一样将新提交添加到newbranch;大数据文件通过commitI到达; M 没有合并冲突,或者如果有,通过从提交 L 获取适当的文件来解决它们;没有其他人需要解决任何问题。


    1在非常现代的 Git 版本中有一个新功能 ,它允许部分获取单个提交。但是使用它很棘手,而且不是做你想做的正确方法。

    【讨论】:

    • 非常感谢您的回答,刚刚意识到我从未回复过...对不起!
    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2021-09-02
    • 2013-10-14
    • 2012-05-03
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多