举例:我的工程叫My,目录树如下
My
|-- My
| |-- Support
| |-- main.m
| |-- images
| |-- My-Prefix.pch
| |-- My-Info.plist
| |-- MyAppDelegate.h
| |-- MyAppDelegate.m
|
|-- My.xcodeproj
我希望把项目AFNetworking加成Submodule,他的目录树如下
AFNetworking
|-- AFNetworking // 这个是真正需要的目录
|-- AFNetworking.xcworkspace
|-- Example
|-- .gitignore
|-- AFNetworking.podspec
|-- CHANGES
|-- LICENSE
|-- README.md
我要把AFNetworking加成submodule
git submodule add https://github.com/AFNetworking/AFNetworking.git My/Support/AFNetworking
最终My的目录结构
My
|-- My
| |-- Support
| | |-- AFNetworking
| | |-- AFNetworking // 这个是真正需要的目录
| | |-- AFNetworking.xcworkspace
| | |-- Example
| | |-- .gitignore
| | |-- AFNetworking.podspec
| | |-- CHANGES
| | |-- LICENSE
| | |-- README.md
| |
| |-- main.m
| |-- images
| |-- My-Prefix.pch
| |-- My-Info.plist
| |-- MyAppDelegate.h
| |-- MyAppDelegate.m
|
|-- My.xcodeproj
我希望得到的目录结构是
My
|-- My
| |-- Support
| | |-- AFNetworking // 这个是真正需要的目录
| |
| |-- main.m
| |-- images
| |-- My-Prefix.pch
| |-- My-Info.plist
| |-- MyAppDelegate.h
| |-- MyAppDelegate.m
|
|-- My.xcodeproj
我通过在子模块目录执行这个命令,达到了效果
git filter-branch -f --subdirectory-filter AFNetworking/AFNetworking -- --all
然后
git filter-branch -f --index-filter "git rm -r -f --cached --ignore-unmatch AFNetworking/AFNetworking" --prune-empty
然后回到父仓库commit并push
看起来一切完美了,但是我重新在clone的时候
这个Submodule的状态是挂的。。。完全clone不出来,AFNetworking只是个目录,没有文件内容
我用SourceTree打开这个工程,然后看通过submodule的方式打开AFNetworking,reset一下,目录结构就回到运行 filter-branch 命令之前的样子了
也就是说,这个效果只有我一个人在运行了 filter-branch 之后看的到,有没有什么办法,可以让大家都看到呢?
另外,我还不知道这样做了以后,如果submodule有更新,能否正常。