由于某种原因,我只有一个存储库可以使用。
但是我有多个项目,包括java项目php scripts和Android应用程序项目。
现在我的问题是,我必须将它们放置在
使用不同IDE 的存储库中的不同子文件夹中
,要知道,每个IDE都可以拥有自己的工作区。
谁能告诉我解决问题的最佳做法?
由于某种原因,我只有一个存储库可以使用。
但是我有多个项目,包括java项目php scripts和Android应用程序项目。
现在我的问题是,我必须将它们放置在
使用不同IDE 的存储库中的不同子文件夹中
,要知道,每个IDE都可以拥有自己的工作区。
谁能告诉我解决问题的最佳做法?
Answers:
尽管大多数人会告诉您仅使用多个存储库,但我觉得值得一提的是还有其他解决方案。
单个存储库可以包含多个独立的分支,称为孤立分支。孤枝彼此完全分开;他们不分享历史。
git checkout --orphan BRANCHNAME
这将创建一个新分支,该分支与您当前的分支无关。每个项目应位于其自己的孤立分支中。
现在,无论出于何种原因,git在孤儿检出后都需要进行一些清理。
rm .git/index
rm -r *
删除之前,请确保已提交所有内容
一旦孤立的分支是干净的,您可以正常使用它。
避免所有孤立分支的麻烦。创建两个独立的存储库,并将它们推送到同一远程。只需为每个存储库使用不同的分支名称。
# repo 1
git push origin master:master-1
# repo 2
git push origin master:master-2
这用于将单个目录用于多个项目。我将这种技术用于一些密切相关的项目,在这些项目中,我经常需要将更改从一个项目拖入另一个项目。它与孤立分支的想法类似,但是分支不需要成为孤立的。只需从相同的空目录状态启动所有项目。
不要期望这种解决方案会带来奇迹。如我所见,您始终会对未跟踪的文件感到烦恼。Git确实不知道如何处理它们,因此,如果编译器生成了中间文件,而您的.gitignore文件忽略了该中间文件,那么如果您尝试快速交换它们,它们有时可能会挂起。例如在您的软件项目和博士学位论文之间。
但是,这是计划。通过提交空存储库来开始任何git项目,然后从相同的空目录状态开始所有项目。这样,您可以确定这两个文件是相当独立的。另外,给分支机构起一个适当的名称,不要懒惰地仅使用“ master”。您的项目需要分开,因此请给它们适当的名称。
Git提交(以及标签和分支)基本上存储了目录及其子目录的状态,而Git不知道它们是同一项目还是不同项目的一部分,因此将git存储在同一存储库中确实没有问题。然后的问题是,当您使用另一个项目时,您要从一个项目中清除未跟踪的文件,或者稍后再分离这些项目。
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
从空开始您的项目。
git branch software EMPTY
git checkout software
echo "array board[8,8] of piece" > chess.prog
git add chess.prog
git commit -m "chess program"
随时随地。
git branch thesis EMPTY
git checkout thesis
echo "the meaning of meaning" > philosophy_doctorate.txt
git add philosophy_doctorate.txt
git commit -m "Ph.D"
随时在项目之间来回移动。这个例子回到国际象棋软件项目。
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
但是,在项目/分支之间进行交换时,未跟踪的文件将使您感到恼火。
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
顾名思义,git实际上并不知道如何处理未跟踪的文件,这取决于您如何处理它们。您可以按照以下步骤阻止未跟踪的文件从一个分支带到另一个分支。
git checkout EMPTY
ls
untracked_software_file.prog
rm -r *
(directory is now really empty, apart from the repository stuff!)
git checkout thesis
ls
philosophy_doctorate.txt
在签出我们的新项目之前,通过确保目录为空,我们确保没有其他项目的挂起未跟踪文件。
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
如果在提交空存储库时指定了相同的日期,则独立创建的空存储库提交可以具有相同的SHA1代码。这样就可以独立创建两个存储库,然后将它们合并到一个树中,并在一个存储库中具有公共根。
# Create thesis repository.
# Merge existing chess repository branch into it
mkdir single_repo_for_thesis_and_chess
cd single_repo_for_thesis_and_chess
git init
touch .gitignore
git add .gitignore
GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01:T01:01:01' git commit -m empty
git tag EMPTY
echo "the meaning of meaning" > thesis.txt
git add thesis.txt
git commit -m "Wrote my PH.D"
git branch -m master thesis
# It's as simple as this ...
git remote add chess ../chessrepository/.git
git fetch chess chess:chess
如果您将项目尽可能保留在子目录中,例如也可以不用文件,这也可能会有所帮助
chess.prog
philosophy_doctorate.txt
有
chess/chess.prog
thesis/philosophy_doctorate.txt
在这种情况下,您的未跟踪软件文件将为chess/untracked_software_file.prog。在thesis目录中工作时,不要被未跟踪的国际象棋程序文件打扰,并且您可能会发现可以愉快地工作而不会从其他项目中删除未跟踪的文件的情况。
另外,如果要从其他项目中删除未跟踪的文件,则转储不需要的目录比通过选择每个文件来删除不需要的文件更快(并且更容易出错)。
因此,您可能想为分支命名,例如
project1/master
project1/featureABC
project2/master
project2/featureXYZ
git submodule add [url to git repo]- git-scm.com/book/en/v2/Git-Tools-Submodules