我有一个git存储库,它有一个名为branches的文件夹,字面上包含来自TFS的repo的不同分支。这是从TFS迁移到git。
我正在尝试使用分支文件夹中的分支在这个新的git仓库中创建新的git分支。有办法吗?
答案 0 :(得分:2)
如果您只是希望TFS中的分支在git中表示为分支,那么我就是这样做的。这不会带来您的所有TFS历史记录 - 如果您需要,您需要使用git-tfs
(Link)等工具。
为了论证,让我们假装你的文件夹结构如下:
/ (Root folder)
Solution/
ProjectA/
Files
ProjectB/
Files
Branches/
Branch1_SomeBranch/
Solution/
Branch2_SomeOtherBranch/
Solution/
branches
文件夹移至另一个目录(即mkdir ../OldBranches/; mv Branches ../OldBranches/
)git status
,您会看到分支文件夹中的内容已删除 git add -A; git commit -m "Removing branches folder"
git checkout -b SomeBranch
.gitignore
和.git/
文件夹以外的所有内容!)。因此,您的存储库唯一看到的是1个文件夹和1个文件。git add -A; git commit -am "Cleaning out repo to recreate SomeBranch"
cp -r ../OldBranches/Branch1_SomeBranch/* .
现在您应该在回购中看到~/Solution/ProjectA
和~/Solution/ProjectB
。git add -A; git commit -m "Imported the branch from TFS"
git checkout -b SomeOtherBranch
Branch2_SomeOtherBranch
继续这样做,直到所有分支都在git中。
Git会记录您的所有历史记录。如果你添加一个文件来git它就会永远存在。每个git clone都有这个历史。如果您的分支文件夹很大并且包含大量大文件,那么您会注意到一些长git clone
个操作和一个大.git/
个文件夹。如果这是一个没有大量历史记录的新存储库,那么使用新的git repo执行此操作可能是值得的。我基本上会这样做:
git init
.gitignore
文件。答案 1 :(得分:0)
注意:这会为您的子目录带来Git历史记录。
在保持历史的同时找到了做到这一点的方法。
要重复 - 我有Repo1 - > Folder1,Folder2和Repo2 - > Folder1,folder2。我想从Repo1中取出Folder1并将其作为Repo 2的分支,同时保留该文件夹的所有个人历史记录。
做到这一点的方法:
git filter-branch --subdirectory-filter foodir -- --all
基本上删除所有未触及该子目录的提交,从而使核心git存储库只包含一个子目录(Folder1)及其所有子目录的提交。答案 2 :(得分:-1)
不,没有办法做到这一点