[英]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
是主分支上的最后一次提交。 提交I
和J
都包含大文件,因此如果有人去獲取提交J
或提交I
,他們將獲得所有數據。 所以我們添加一個指向提交H
的新名稱:
I--J <-- main
/
...--F--G--H <-- newbranch
現在我們從I
和/或J
我們想要的任何更新,並使用它們來更新一些文件並制作一個新的提交快照K
:
I--J <-- main
/
...--F--G--H------K <-- newbranch
Commit K
沒有大文件。 通過避免獲取I
和J
,沒有人必須等待大文件。
任何額外的工作都會增加更多的提交:
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.