【问题标题】:Create remote repository from local files that are already on a local repo从本地存储库中已经存在的本地文件创建远程存储库
【发布时间】:2012-02-02 17:09:51
【问题描述】:

我知道可以执行此操作的克隆功能,但它会克隆存储库中的内容,即推送的所有内容。

我们需要修改存储库模板中的一些文件并使用这些修改后的文件创建一个新的存储库,而无需将这些文件(依赖于项目)提交到我们的模板,因此它保持不变。

这可能吗?使用“git add”、“git commit”和“git push”,并带有一个额外的参数,即远程存储库?

基本上,我想要的是文件,而不是 repo。

【问题讨论】:

  • 你可以使用git remote add,然后推送到那个新的遥控器。
  • 这不是一个坏主意,但是如果我们从模板中修改文件,它们也会被推送到从它派生的所有项目上,这可能会破坏事情。
  • 新仓库和原来的仓库应该是什么关系? IE。对原始存储库(在共享文件上)的更改是否应该反映在新存储库中?还是只是一次性的副本?
  • 只是一次性副本,没有附加条件

标签: git bash deployment ssh


【解决方案1】:

考虑主存储库 (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),您主要需要强制合并子存储库。

【讨论】:

    【解决方案2】:

    最简单的方法是使用本地克隆,您可以在推送到远程之前应用更改。您可以执行以下操作:

    1. 制作模板存储库的副本。

      git clone --no-hardlinks templaterepo newrepo

    2. 从旧存储库中过滤掉您不想保留的文件。

      cd newrepo

      git filter-branch --tree-filter "rm -f sensitive/file1.txt file2.txt" HEAD

    3. 按照您通常在 Git 中所做的任何其他更改。

      git add ...

      git commit ...

    4. 添加遥控器。

      git remote add origin git@...

    5. 推

      git push origin master

    这将确保您保留所有您真正关心的文件的历史记录,并清除您不关心的文件(并且可能包含敏感数据)的历史记录。

    在第 1 步之后。newrepo 与 templaterepo 基本上不再有任何关系,除了共享历史记录(--no-hardlinks 假设您正在从同一个文件系统克隆并且只是为了提高速度),所以无论如何之后你在你的templaterepo 上做,它不会影响newrepo(或其远程)的内容。

    请参阅git help filter-branch 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2012-11-29
      相关资源
      最近更新 更多