在阅读此问题时可能会很明显,我对Git和GitHub还是很陌生,所以如果我使用的术语不正确或者我问的是一个愚蠢的问题,请原谅我。
我将Vue.js和Vuetify用于我的项目。最近,我创建了一个基础项目,希望将其用于以后的项目中,作为入门的简便方法。基础项目用作模板,因为它具有我要使用的所有设置和文件。我创建了一个Git存储库,并将其上传到GitHub。我不打算将来以任何方式更改此存储库。
现在,我想将其用于新项目,但是我不确定该怎么做。我的第一个想法是克隆基础项目的存储库,删除.git文件,然后使用基础项目中的文件作为初始提交为新项目创建新的git存储库,但这似乎不正确做到的方式。我也不想“分叉”它,因为我真的不想对基础项目进行更改。
基本上,我想从基础项目存储库中复制文件,维护到基础项目存储库的某种链接(这样我就知道从哪里获得文件了),但是开始“新鲜”,无需参考基础项目存储库。从那时起,基础项目和新项目就不必进行交互,因此,我不需要新项目来从基础项目中进行更改。
最好的方法是什么?
答案 0 :(得分:1)
一个选项(可能有很多)是将您的新项目创建为空白项目-可能是使用自述文件或.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
最后三行是这里的关键行,在此之前的所有操作都只是设置一个空白存储库(但是,如果您使用gitlab或其他任何东西,只需使用它来设置新的存储库)。
所以在这里,我们正在创建带有一些初始提交的存储库。然后,我们将基本存储库添加为远程存储库,然后将其合并。基本存储库未更改,其思想是您永远不会推送到该存储库(甚至可以保护它,因此没有人会意外地这样做)。
但是您将拥有基本回购的历史记录。所以看起来像这样:
* 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/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
然后,您刚刚在一次提交中将基础合并了,那么您将看到的所有提交。请注意,由于--squash
,您需要在拉动之后提交。