簡體   English   中英

git pull 不包括某些文件?

[英]git pull excluding some file?

我有一個供學生使用的公共存儲庫,我在其中推送了一個大型數據集和一些更正。 問題是我們現在這里有風暴,連接真的很差。 此外,學生已經為練習目的自行下載了數據集。

我的問題,我想不出一個簡單的解決方案:有沒有辦法讓他們在沒有數據集的情況下拉取 repo(僅在那個時候),並且只要連接恢復,在他們下一次拉取時,他們就會能夠拉動一切。

我在想git fetch + git merge只想要文件,但這並不是我想要的,因為理想情況下它是git fetch + git merge不包括一個文件夾(數據文件夾)。

希望我的問題足夠清楚並且有一個簡單的解決方案! 謝謝你的幫助

Pull 就是 fetch + merge(或者 fetch + rebase); 這是引入新 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

其中提交H是我們關心的哈希值:在提交I中添加大數據之前。 提交J可能存在也可能不存在:如果不存在,則提交I是主分支上的最后一次提交。 提交IJ都包含大文件,因此如果有人去獲取提交J或提交I ,他們將獲得所有數據。 所以我們添加一個指向提交H的新名稱

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

現在我們從I和/或J我們想要的任何更新,並使用它們來更新一些文件並制作一個新的提交快照K

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

Commit 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 大數據文件通過提交I到達; 並且在M處沒有合並沖突,或者如果有,通過從提交L獲取適當的文件來解決它們; 沒有其他人需要解決任何問題。


1非常現代版本的Git,將允許部分獲取單個提交的一項新功能。 但是使用它很棘手,而且不是做你想做的事情的正確方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM