如何在不cd进入每个repo的根目录的情况下从共享父目录更新多个git存储库?我有以下几个单独的git存储库(不是子模块):
/plugins/cms
/plugins/admin
/plugins/chart
Run Code Online (Sandbox Code Playgroud)
我想一次更新它们或者至少简化我当前的工作流程:
cd ~/plugins/admin
git pull origin master
cd ../chart
git pull
Run Code Online (Sandbox Code Playgroud)
等等
我刚刚运行了一个git diff,我得到了所有大约10个子模块的以下输出
diff --git a/.vim/bundle/bufexplorer b/.vim/bundle/bufexplorer
--- a/.vim/bundle/bufexplorer
+++ b/.vim/bundle/bufexplorer
@@ -1 +1 @@
-Subproject commit 8c75e65b647238febd0257658b150f717a136359
+Subproject commit 8c75e65b647238febd0257658b150f717a136359-dirty
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我如何解决它?
我们正在将我们(巨大的)项目转移到git,我们正在考虑使用子模块.我们的计划是在超级项目中有三个不同的头:发布,稳定,最新.项目负责人将处理释放和稳定的分支机构.他们将根据需要移动子模块.
问题是"最新"头.我们希望超级项目"最新"头部跟踪所有子模块的主分支(自动).如果能够显示子模块的所有提交历史,那也很棒.
我看过gitslave,但它不是我们想要的.有什么建议?
我有一个包含其他git存储库的git存储库.是否存在以递归方式推送和/或拉取元存储库而不是子存储库的命令?
试图在这个网站和其他人寻找答案: StackOverflow - 简单的方法拉最新的所有子模块
他们似乎都想谈谈你是否正在控制它们,而不是如果其他人添加了一个,我只想将额外的一个添加到我的项目中,而不需要保存或备份我的更改,如果我需要删除该文件夹.
我应该删除我已经删除的.gitmodules文件和/或子模块目录git clone --recursive吗?(StackOverflow - 如何git clone包含子模块?)
这些命令似乎也没有帮助:
git submodule update --init --recursive 好像什么也没做.git submodule update --recursive 没有.git fetch --recurse-submodules输出Fetching submodule ...几次.git pull --recurse-submodules输出相同的东西,然后Already up-to-date.在获取试用后说.奇怪,因为在任何一种情况下我的子模块都已下载.git clone --recursive ... 尚未尝试过. 我觉得会覆盖我在Stash或其他方面做出的任何改变.git submodule update --recursive --remote 检查出其中一个子模块的新提交SHA.git submodule update --recursive检查出其中一个子模块的新提交SHA.可能是较旧的原始提交级别.git submodule status 为每个提供适当的SHA,版本和名称信息,同时仍然缺少我想要的那个.git submodule foreach git pull origin mastergit submodule update 什么也没做.我每次都手动仔细检查库目录,以确定是否出现了额外的子模块.
我想避免执行某些操作,除非它们对我当前包含代码更改的存储库状态没有破坏性,并解决了我的问题,以防它是我提到的但没有运行的命令,或者其他人有另一个尝试. …
我有一个带有一些子模块的项目.其中许多是从GitHub fork中克隆到的,我为自定义mod添加了一个分支.典型的设置如下:
在本地文件夹中:MyProject1/Frameworks/SomeAmazingRepo /
$ git branch -vva
*my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
master abcdef [origin/master] Latest commit msg from original repo
remotes/my-fork/my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
remotes/my-fork/master abcdef [origin/master] Latest commit msg from original repo
remotes/origin/HEAD -> origin/master
remotes/origin/master abcdef [origin/master] Latest commit msg from original repo
$ git remote -v
my-fork git@github.com:MyUser/SomeAmazingRepo.git (fetch)
my-fork git@github.com:MyUser/SomeAmazingRepo.git (push)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (fetch)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (push)
Run Code Online (Sandbox Code Playgroud)
我git clone --recursive我的项目开始一个新的分拆计划,当它开始递归,它吐出了一个错误,声称它找不到这些回购存储的提交.检查后,似乎没有添加遥控器,并且分支机构在主机中留下(空)...
在本地文件夹中:MyProject2/Frameworks/SomeAmazingRepo /
$ git branch …Run Code Online (Sandbox Code Playgroud) 我有一个修改过的文件,我想对最新提交中的任何内容进行反复处理,但是它"卡住",总是被标记为已修改.
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.php
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
然后我尝试:
$git checkout -- index.php
Run Code Online (Sandbox Code Playgroud)
但是git状态的输出仍然是相同的.然后我尝试:
$git reset --hard master
HEAD is now at 02c9613 test commit message
Run Code Online (Sandbox Code Playgroud)
并且git状态的输出仍然是相同的.
关于如何摆脱该文件假设的变化的任何想法?
当项目包含子模块时,您需要分别存储/取消暂存所有子模块.有没有办法用较少的动作来做到这一点?
这个链接可能有帮助:
它是关于"拉"命令,但有一些方法如何在所有子模块之间进行迭代.
我想使用git子模块.
我需要采取的步骤将我的更改推送到我的项目中
- 从子模块目录添加/ commit/push
- 从父目录添加/提交/推送
我需要采取措施来拉动项目的变化.
- 来自父目录的git pull
- 从父目录更新git子模块
从原始仓库更新子模块的步骤
- 来自子模块目录的git pull
令我担心的是http://git-scm.com/book/en/Git-Tools-Submodules的以下内容
问题是您通常不希望在分离的HEAD环境中工作,因为它很容易丢失更改.如果你做了一个初始子模块更新,在该子模块目录中提交而不创建一个分支工作,然后再从超级项目运行git子模块更新而不同时提交,(?? update/commit/update将失去更改?) Git会在不告诉您的情况下覆盖您的更改.从技术上讲,你不会失去工作,但你不会有一个分支指向它,所以它将有点难以检索.
要避免此问题,请在使用git checkout -b work或等效工作的子模块目录中创建分支.当您第二次执行子模块更新时,它仍将恢复您的工作,但至少您有一个指针可以返回.
我要修改子模块并且不想搞砸,上面的文档简要提到了失去变化的可能性,我不明白可能导致丢失的原因.
我想知道除了上面列出的更多的其他步骤,我需要采取什么来防止损失.特别是几个团队成员修改子模块,他们需要做些什么不搞乱?
我对使用git的子模块功能感到非常沮丧.要么我仍然没有做对,要么就是因为我没想到这一点.以下项目情况给出:
Project
| .git
| projsrc
| source (submodule)
| proj.sln
Run Code Online (Sandbox Code Playgroud)
在此方案中,源指向包含所有项目中的公共源数据的另一个存储库.在源代码下发生了很多开发,也在projsrc下.遗憾的是,Project指向源子模块的一些提交,而不是它的实际HEAD.这是通常的git行为,据我所知.
我已经发现了
git submodule update
Run Code Online (Sandbox Code Playgroud)
只需获取与主项目一起提交的子模块版本.但是,我真的希望始终与子模块开发保持同步,但是没有任何真正的线索如何做到这一点.因此我的问题是:
是否可以将项目附加到子模块的HEAD,不管这是否会破坏项目的编译.我只是不想总是进入子模块目录并执行git pull.因为我认为我可以放弃在子模块目录中完成的更改,因为这很简单地附加到提交而不是真正的任何分支左右.
请考虑以下限制: