签出 Git 存储库中的特定文件夹
Checkout a Specific Folder within a Git Repository
我在不同的存储库中有多个项目:
tools
thirdparty
shared
├──Common
├──Exceptions
multimedia
├──VolumeControl
├──VideoRenderer
android
├──Audio
例如,android 依赖于 shared/Common、shared/Exceptions、工具、第三方和 multimedia/VolumeControl。
我试过了:
- 子模块:https://git-scm.com/book/en/v2/Git-Tools-Submodules
- 稀疏结帐:http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/
但是,他们都在 android 文件夹中检出或导入多媒体文件夹。相反,我希望它像:
android
├──Audio
├──VolumeControl (brought in from multimedia)
我该如何完成?
注意:我曾经在 svn 中使用 lockexterns 来完成此操作。
How do I accomplish this?
您可以使用 git filter-branch
和或 git subtree split
filter-branch 将遍历每个提交,然后您可以只签出给定的文件,而 git subteree split
将是您的更好选择。
解释这两个选项,以便您可以选择您喜欢的一个。
示例代码:
filter-branch
# Filter the master branch to your directory and remove empty commits
git filter-branch --prune-empty --subdirectory-filter YOUR_FOLDER_NAME filter_from_branch
这会将您需要的所有文件从给定文件夹检出到当前目录
subtree split
git subtree
git-subtree
- Merge
subtrees together or split
repository into subtrees
git subtree split -P <name-of-folder> -b <name-of-new-branch>
我想知道为什么 git-submodule
无法实现。我记得,使用子模块可以指定目标目录,因此您可以这样做:
$ cd Android
$ git submodule add url/path-to-your-submodule-repo VolumeControl
$ git diff --cached --submodule # OPTIONAL - To verify before commit
$ git commit -m 'added multimedia/VolumeControl as sub-module'
我在不同的存储库中有多个项目:
tools
thirdparty
shared
├──Common
├──Exceptions
multimedia
├──VolumeControl
├──VideoRenderer
android
├──Audio
例如,android 依赖于 shared/Common、shared/Exceptions、工具、第三方和 multimedia/VolumeControl。
我试过了:
- 子模块:https://git-scm.com/book/en/v2/Git-Tools-Submodules
- 稀疏结帐:http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/
但是,他们都在 android 文件夹中检出或导入多媒体文件夹。相反,我希望它像:
android
├──Audio
├──VolumeControl (brought in from multimedia)
我该如何完成?
注意:我曾经在 svn 中使用 lockexterns 来完成此操作。
How do I accomplish this?
您可以使用 git filter-branch
和或 git subtree split
filter-branch 将遍历每个提交,然后您可以只签出给定的文件,而 git subteree split
将是您的更好选择。
解释这两个选项,以便您可以选择您喜欢的一个。
示例代码:
filter-branch
# Filter the master branch to your directory and remove empty commits
git filter-branch --prune-empty --subdirectory-filter YOUR_FOLDER_NAME filter_from_branch
这会将您需要的所有文件从给定文件夹检出到当前目录
subtree split
git subtree
git-subtree
-Merge
subtrees together orsplit
repository into subtrees
git subtree split -P <name-of-folder> -b <name-of-new-branch>
我想知道为什么 git-submodule
无法实现。我记得,使用子模块可以指定目标目录,因此您可以这样做:
$ cd Android
$ git submodule add url/path-to-your-submodule-repo VolumeControl
$ git diff --cached --submodule # OPTIONAL - To verify before commit
$ git commit -m 'added multimedia/VolumeControl as sub-module'