我知道可以做到这一点的克隆功能,但它会克隆回购中的内容,即被推送的所有内容。
我们需要的是修改我们的存储库模板中的一些文件并使用这些修改过的文件创建一个新的repo,而不必将这些文件(与项目相关)提交到我们的模板,因此它保持不变。
这甚至可能吗?使用“git add”,“git commit”然后使用额外的参数“git push”作为远程存储库?
基本上,我想要文件,而不是回购。
答案 0 :(得分:2)
考虑主存储库(main)和继承的存储库(child1,child2)。我要做的是在主存储库中为每个孩子创建一个分支:
main$ git checkout -b child1
... edit/commit for child1 ...
main$ git checkout master
main$ git checkout -b child2
... edit/commit for child2 ...
现在,你可以这样做:
main$ git push git@yourserver:repositories/child1.git child1:master
main$ git push git@yourserver:repositories/child2.git child2:master
这会将分支child1推送到存储库child1的主服务器上。这样您就可以保持主要主人的清洁。如果这是一次性推送,您可以在之后删除分支。如果您无法快进(see the refspec for the push),则主要需要强制对子存储库进行合并。
答案 1 :(得分:0)
最简单的方法是使用本地克隆,在推送到遥控器之前可以应用更改。您可以执行以下操作:
制作模板存储库的副本。
git clone --no-hardlinks templaterepo newrepo
从旧存储库中筛选出您不想保留的文件。
cd newrepo
git filter-branch --tree-filter "rm -f sensitive/file1.txt file2.txt" HEAD
像往常一样在Git中进行任何其他更改。
git add ...
git commit ...
添加遥控器。
git remote add origin git@...
推
git push origin master
这将确保您保留您实际关注的所有文件的历史记录,并清除您不关心的文件的历史记录(以及可能包含敏感数据的文件)。
在第1步之后。newrepo
与templaterepo
基本上没有任何关系,除了共享历史记录(--no-hardlinks
假设你是从同一个文件系统克隆而且只是为了额外的速度),所以无论你之后在templaterepo
做什么,它都不会影响newrepo
(或它的遥控器)的内容。
有关详情,请参阅git help filter-branch
。