簡體   English   中英

在 Git/GitHub 中使用“模板化”項目的良好實踐

[英]Good practice for using "templated" projects with Git/GitHub

在閱讀這個問題時可能會變得很明顯,我對 Git 和 GitHub 還是很陌生,所以如果我沒有使用正確的術語或者我問的是一個愚蠢的問題,請原諒我。

我在我的項目中使用 Vue.js 和 Vuetify。 最近,我創建了一個基礎項目,我想將其用於我未來的項目,作為一種簡單的入門方式。 基礎項目用作模板,因為它包含我想要使用的所有設置和文件。 我創建了一個 Git 存儲庫並將其上傳到 GitHub。 我不打算在將來以任何方式更改此存儲庫。

現在,我想將它用於一個新項目,但我不知道該怎么做。 我的第一個想法是克隆基礎項目的存儲庫,刪除 .git 文件,然后為新項目創建一個新的 git 存儲庫,使用基礎項目中的文件作為初始提交,但似乎不太正確方法來做到這一點。 我也不想“分叉”,因為我真的不想對基礎項目進行更改。

基本上,我想從基礎項目存儲庫中復制文件,維護到基礎項目存儲庫的某種鏈接(所以我知道我從哪里獲得文件)但開始“新鮮”,無需參考基礎項目再次存儲庫。 從那時起,基礎項目和新項目不必進行交互,因此我不需要新項目從基礎項目中提取更改。

做到這一點的最佳方法是什么?

一種選擇(可能有很多)是將您的新項目創建為空白項目 - 可能使用自述文件或 .gitignore 或其他內容進行初始提交。 然后將您的“基本”存儲庫添加為另一個遙控器並將其合並。例如:

mkdir derived_proj
cd derived_proj
git init
touch readme.md
git add readme.md
git commit -am "Initial commit"
git remote add base <url-to-base>
git fetch base
git pull base master --allow-unrelated-histories

最后三行是這里的關鍵行,在此之前的所有內容都只是設置一個空白的 repo(但如果您使用 gitlab 或其他任何東西,則只需使用它來設置您的新 repo)。

所以在這里我們正在創建一個帶有一些初始提交的 repo。 然后我們將基礎倉庫添加為遠程倉庫,然后將其合並。基礎倉庫保持不變,我們的想法是您永遠不會推送到它(甚至可以保護它,因此沒有人會意外地這樣做)。

但是您將擁有基礎回購的歷史記錄。 所以它看起來像這樣:

*   70bd2be (HEAD -> master) Merge branch 'master' of ../big_array
|\  
| * 6f0f769 (base/master) added instruction
| * 82a54b6 updated with some results in the readme
| * 6f57491 initial working version
| * ecba7af added readme
| * ef8689e added make utils. Updated gitignore
| * b046678 First commit - working code
* f7e79cb updated test
* 2aeec74 init commit

您可以在此處看到master分支具有來自 base repo 的base/master分支的祖先。

您可以刪除基礎存儲庫以提高安全性:

git remote remove base

結果是:

*   70bd2be (HEAD -> master) Merge branch 'master' of ../big_array
|\  
| * 6f0f769 added instruction    <----- NO BASE REMOTE
| * 82a54b6 updated with some results in the readme
| * 6f57491 initial working version
| * ecba7af added readme
| * ef8689e added make utils. Updated gitignore
| * b046678 First commit - working code
* f7e79cb updated test
* 2aeec74 init commit

這樣你就受到保護。 但是,如果您保留基礎存儲庫,那么您可以在以后對基礎進行任何更改 - 盡管您說它很可能不會更改 - 您永遠不知道......

更新

以防萬一你不想要整個歷史,你可以這樣做:

git remote add base <url-to-base>
git fetch base
git pull base master --allow-unrelated-histories --squash
git commit -am "Added/pulled base->master"    <---- NEED TO COMMIT
git remote remove base

然后,您剛剛在一次提交中合並到 base 中,並且該提交就是您將看到的全部內容。 請注意,由於--squash您需要在 pull 后提交。

暫無
暫無

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

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