使用来自目录外部的东西初始化一个git分支

时间:2014-07-30 12:07:58

标签: git tfs git-branch

我有一个git存储库,它有一个名为branches的文件夹,字面上包含来自TFS的repo的不同分支。这是从TFS迁移到git。

我正在尝试使用分支文件夹中的分支在这个新的git仓库中创建新的git分支。有办法吗?

3 个答案:

答案 0 :(得分:2)

注意:这不会带来您的TFS历史记录。

如果您只是希望TFS中的分支在git中表示为分支,那么我就是这样做的。这不会带来您的所有TFS历史记录 - 如果您需要,您需要使用git-tfsLink)等工具。

如何创建与您的TFS分支对应的git分支(无历史记录)

为了论证,让我们假装你的文件夹结构如下:

/ (Root folder)
  Solution/
    ProjectA/
      Files
    ProjectB/
      Files
  Branches/
     Branch1_SomeBranch/
       Solution/
     Branch2_SomeOtherBranch/
       Solution/
  1. branches文件夹移至另一个目录(即mkdir ../OldBranches/; mv Branches ../OldBranches/
  2. 运行git status,您会看到分支文件夹中的内容已删除
  3. git add -A; git commit -m "Removing branches folder"
  4. 为Branch1创建一个新分支git checkout -b SomeBranch
  5. 删除repo的内容(除.gitignore.git/文件夹以外的所有内容!)。因此,您的存储库唯一看到的是1个文件夹和1个文件。
  6. 提交git add -A; git commit -am "Cleaning out repo to recreate SomeBranch"
  7. 将SomeBranch的内容复制到Repo :即cp -r ../OldBranches/Branch1_SomeBranch/* .现在您应该在回购中看到~/Solution/ProjectA~/Solution/ProjectB
  8. 添加并提交git add -A; git commit -m "Imported the branch from TFS"
  9. 为Branch2创建一个新分支git checkout -b SomeOtherBranch
  10. 对SomeOtherBranch 重复步骤5-8。请记住稍微更改步骤7以从Branch2_SomeOtherBranch
  11. 进行复制

    继续这样做,直到所有分支都在git中。

    关于git历史记录的附注

    Git会记录您的所有历史记录。如果你添加一个文件来git它就会永远存在。每个git clone都有这个历史。如果您的分支文件夹很大并且包含大量大文件,那么您会注意到一些长git clone个操作和一个大.git/个文件夹。如果这是一个没有大量历史记录的新存储库,那么使用新的git repo执行此操作可能是值得的。我基本上会这样做:

    1. 将分支移动到另一个文件夹
    2. 创建新的git repo:git init
    3. 设置适当的.gitignore文件。
    4. 承诺掌握:`git add -A; git commit -m"初始提交主分支中的TFS内容"
    5. 从上面重复步骤4-10。

答案 1 :(得分:0)

注意:这会为您的子目录带来Git历史记录。

在保持历史的同时找到了做到这一点的方法。

要重复 - 我有Repo1 - > Folder1,Folder2和Repo2 - > Folder1,folder2。我想从Repo1中取出Folder1并将其作为Repo 2的分支,同时保留该文件夹的所有个人历史记录。

做到这一点的方法:

  1. 在您的本地克隆Repo1 ,这样您就不会丢失任何东西。
  2. 使用命令git filter-branch --subdirectory-filter foodir -- --all基本上删除所有未触及该子目录的提交,从而使核心git存储库只包含一个子目录(Folder1)及其所有子目录的提交。
  3. 现在在Repo2中初始化分支
  4. 推送Repo1 (现在只包含该子目录及其更改集历史记录)作为Repo2的分支
  5. 你已经完成了。

答案 2 :(得分:-1)

不,没有办法做到这一点