使用android Studio从包含android应用程序作为新项目的Git-only子文件夹中签出

使用android Studio从包含android应用程序作为新项目的Git-only子文件夹中签出,git,android-studio,Git,Android Studio,我有一个现有的git存储库,其结构如下: Mobile_Application -android-app -ios-app -paying-services 我想在我的Android Studio 3.0.1版中作为新项目签出,只签出Android应用程序文件夹中包含的内容。我试图签出整个项目,我提取了所有文件夹的内容,但根本无法构建android项目。 是否可以只签出android app文件夹作为新项目?好的,我知道你想要什么,我会尽可能给你最完整的答案,你可能会在这一过程中了解一些关于g

我有一个现有的git存储库,其结构如下:

Mobile_Application
-android-app
-ios-app
-paying-services
我想在我的Android Studio 3.0.1版中作为新项目签出,只签出
Android应用程序
文件夹中包含的内容。我试图签出整个项目,我提取了所有文件夹的内容,但根本无法构建android项目。
是否可以只签出
android app
文件夹作为新项目?

好的,我知道你想要什么,我会尽可能给你最完整的答案,你可能会在这一过程中了解一些关于git的知识:

假设您的存储库有一个远程存储库,即您通过
git clone
从现有远程存储库克隆了存储库。如果没有,请确保它已“推”到某个远程位置

  • 运行以下命令将当前存储库配置为允许稀疏签出:

  • 然后,在git bash内部运行以下命令,以指定要保留在工作树中的路径(用于“签出”的奇特术语):

    非常重要请在
    git bash
    提示符内运行此命令,不要使用PowerShell/CMD来执行此操作,否则生成的文本文件可能会使用带有BOM标记的Unicode编码,
    git
    将使用典型的
    “错误:稀疏签出在工作目录上没有留下条目”

    (已经通知过你了!)

  • 然后运行以下命令更新索引和工作树:

    git read-tree -mu HEAD
    

  • 瞧,你的工作树应该只包含你存储库根目录下的
    android app/
    文件夹!

    这不是正式的方式,也不合适,但你可以尝试用这种方式在android中打开终端。在提交之前,这里面有什么

    git branch 
    *  master
    
    git add .
    git commit -m " your suitable comment"
    
    git add .
    git commit -m "init"
    
    以保护您当前的代码

    git checkout -b new-branch
    git branch
      master
    * new-branch
    
    删除您提到的不需要的
    new branch
    上的文件夹

    -ios-app
    -paying-services
    
    现在再次承诺

    git branch 
    *  master
    
    git add .
    git commit -m " your suitable comment"
    
    git add .
    git commit -m "init"
    
    现在,如果您有以前的提交列表,并且不想显示所有提交列表,您可以这样做

    git log --oneline -1
    sha1
    git reset --hard sha1
    
    现在你在新的分支上,只有android应用程序中包含的内容

    Mobile_Application
    -android-app
    
    您的任务完成了!您想要什么,但是如果您想要当前分支,您可以删除上一个分支

    git branch -d master
    git branch
    * new-master
    
    如果要将当前的
    新分支
    作为主分支

    git branch -m master
    git branch
    * master
    

    这些子项目是否以某种方式在内部连接?它们是否共享一些东西—测试、库、CI设置或其他需要在不同子项目中重用的东西?它们是否相互依赖

    如果这些问题的答案是“不”,那么你正在做的事情是错误的

    我不能绝对肯定为什么你们会有这种内部有子项目的单一回购协议,但这就是我建议你们的:

    选项1:为每个子项目创建三个独立的git存储库,然后签出Android子项目。然后你就可以解决所有问题。这更专业,可以让事情保持独立和简单。另外,签出Android子项目时不需要任何奇怪的git hub命令。以后所有这些子项目都在成长,许多开发人员同时开始开发它们,将它们作为一个大型存储库,可能会产生问题、限制、限制和混乱。每个项目单独的git回购不需要任何成本

    选项2:使用一些git工具签出monolit存储库,但不要直接签出Android Studio(简单的git终端或SourceTree或任何其他git UI应用程序(编辑器))。签出存储库后,打开Android Studio,选择打开现有项目并导航到Android项目目录(Android应用程序)。这将使您可以选择只在Android Studio中加载Android部分。当然,这有很大的缺点,因为在这种情况下,您绕过了Android Studio git工具,但您仍然可以使用外部git UI应用程序(在开始时用于签出项目的应用程序)来推送、拉送等

    选项3:在git中使用称为“稀疏签出”的东西。可以通过以下方式实现:

    git init <repo>
    cd <repo>
    git remote add origin <url>
    git config core.sparsecheckout true
    echo "android-app/*" >> .git/info/sparse-checkout
    git pull --depth=1 origin master
    
    git init
    光盘
    git远程添加源
    git config core.sparsecheckout true
    echo“android app/*”>.git/info/sparse checkout
    git pull--深度=1原点主控
    
    看看git稀疏签出的完整正确解释

    更多信息或不同的方法,您可以从

    如果你的客户想要一个包含所有项目的单一回购协议,试着说服他,这不会带来任何好处,但只会增加复杂性,这是错误的

    我希望这将有助于你解决问题,但我个人建议选择1。这是正确的方法,不需要任何费用,除非你有任何反对的理由,但我怀疑:)


    祝你好运

    当你说无法建造它时,是什么原因导致了同样的结果?我使用了选项3