过了一段时间我想更新我的git repo,然后出了点问题.出现这种情况的正确方法是什么?
mblsha@siruba:~/src/psi/ $ git status
iris: needs merge
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: src/common.cpp
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# unmerged: iris
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# gupdate.sh
mblsha@siruba:~/src/psi/ $ git submodule status
+cf237ef8f3d9dc058dbde47e6973e6388608ce60 iris (heads/master)
+cf237ef8f3d9dc058dbde47e6973e6388608ce60 iris …Run Code Online (Sandbox Code Playgroud) 假设我有一个库Common,可以使用独立的,并且所使用的项目P1和P2,因此,树我想要的样子
/Common/.git
...
/P1/.git
.gitmodules # points to remote server
Common/
...
/P2/.git
.gitmodules # points to remote server
Common/
...
Run Code Online (Sandbox Code Playgroud)
当我进行更改时/Common,我希望能够在提交之前P1和P2之前测试它.使用通常的git submodule命令集,我将不得不提交/Common,推送到远程,然后从两个/P1/Common和/P2/Common.如果提交中断了某些内容,则无法修改,因为已经发布了错误的更改.或者,我可以git remote add quicktest /Common在/P?/Common不触摸远程服务器的情况下拉动.但是这有很多不一致的机会,并且删除破坏的提交是很脏的,/P?/Common以便可以修改它们/Common.
我宁愿认为,在开发过程中,从工作树/Common被使用P1和P2,但我不能让/P1/Common一个符号链接/Common,因为git submodule识别符号链接从目录不同.大多数文件系统不允许使用硬链接目录.我可以使用硬链接所有文件
rm -rf /P1/Common
cp -rl /Common /P1/Common
Run Code Online (Sandbox Code Playgroud)
/Common在添加新文件之前效果很好,在这种情况下需要重复此过程.两者都有优雅的方式吗?
git …我有多个项目与其他项目共享子应用程序.在项目目录中工作时,我希望能够对应用程序进行更改,更新它,并将这些更新提取到第二个项目中.
需求:
这是结构:
app_one (git repo)
|-- app_one (actual app uses by projects)
| +-- models.py
|-- README.md
+-- setup.py
project_one (git repo)
|-- project_one
| |-- apps
| | |-- app_one
| | | +-- models.py
| | | -- app_two
|-- setup.cfg
+-- setup.py
project_two (git repo)
|-- project_two
| |-- apps
| | |-- app_one (same app …Run Code Online (Sandbox Code Playgroud) 假设我有两个Git存储库,A和B. B是A的子模块.
为了简单起见,我们还假设我有一个神奇的函数get_sha_B,给定来自A的SHA提交,返回B的所需SHA提交.
如何在repo A上运行filter-branch,以便重新编写repo A的每个提交以指向所需的repo B提交,如get_sha_B?
谢谢!
我已经分叉了MapBox-ios-sdk并对其进行了一些更改.更新版的sdk就在这里,我将更改合并到了fork中.MapBox-ios-sdk还包含SMCalloutView,它是MapBox-ios-sdk中的子模块.然而,官方sdk的版本使用了更新的,更新的SMCalloutView,它不在我的分支中.
我如何让它更新
我用这里的说明更新了我的sdk .但是,这不会更新SMCalloutView.我也尝试过git submodule update --recursiveMapBox-ios-sdk的级别,没有任何反应.事实证明,这是因为SMCallOutView处于"无分支"状态.为什么它在"没有分支"?如何将所有子模块置于"无分支"状态之外?如果它处于"无分支",那么我永远不会知道需要更新的子模块(或甚至更多嵌套)的子模块或子模块.
我目前正在尝试编写一个Makefile,以正确构建包含git子模块的项目。该子模块具有自己的makefile集,并一次生成多个目标,包括一些库。
此Makefile应该具有以下属性。
只是为了设定想法,这似乎是可行的。
FOO_SUBDIR := $(CURDIR)/foo
LDFLAGS := -L$(FOO_SUBDIR)
FOO_LIBSFILES := $(FOO_SUBDIR)/libfoo.a $(FOO_SUBDIR)/libgnufoo.a
FOO_LDLIBS := -lfoo -lgnufoo
.PHONY: all
all: main
# There are theoretically 3 main binaries
main: main.c $(FOO_LIBSFILES)
gcc -o $@ $< $(LDFLAGS) $(FOO_LDLIBS)
$(FOO_LIBSFILES): libfoo
@# Do nothing
.PHONY: libfoo
libfoo:
$(MAKE) -C $(FOO_SUBDIR)
Run Code Online (Sandbox Code Playgroud)
我添加了空食谱似乎很有效,但我不明白为什么。
这个想法是始终依靠子模块的Makefile进行重建(或不重建)libfoo.a和libgnufoo.a,并让主Makefile决定是否main需要重建。没有空食谱,它是行不通的。当foo/foo.c被修改,然后libfoo.a重新生成,但make不重建main。
我有一种空的配方强制检查目标文件的日期的感觉。但是我找不到有关此行为的文档。
这是正确的方法吗?我应该注意的任何陷阱?还有什么比较晦涩的方法吗?或有关此行为的任何文档?
提前致谢。
我在Windows上使用git与Jenkins有问题,我可以使用ssh凭据从BitBucket获取git存储库,但是当它尝试获取同一帐户上的子模块存储库时,我获得了权限异常.
从git@bitbucket.org获取上游更改:mycomp/at.git
C:\ CI\Git\bin\git.exe - 使用GIT_SSH设置凭证Bitbucket密钥C:\ CI\Git\bin\git.exe fetch --tags --progress git@bitbucket.org:mycomp/at .git + refs/heads/:refs/remotes/origin / C:\ CI\Git\bin\git.exe rev-parse"origin/ci ^ {commit}"签出修订版a079842300ba7fc9e6f4e7182c94af2cfc3af0ba(origin/ci)C:\ CI\Git\bin\git.exe config core.sparsecheckout C:\ CI\Git\bin\git.exe checkout -f a079842300ba7fc9e6f4e7182c94af2cfc3af0ba C:\ CI\Git\bin\git.exe rev-list a079842300ba7fc9e6f4e7182c94af2cfc3af0ba C:\ CI\Git\bin\git.exe远程C:\ CI\Git\bin\git.exe子模块init C:\ CI\Git\bin\git.exe子模块同步C:\ CI\Git\bin\git.exe config - -get remote.origin.url C:\ CI\Git\bin\git.exe子模块更新FATAL:命令"C:\ CI\Git\bin\git.exe submodule update"返回状态码1:stdout:stderr:Cloning进入'include/portal_air'...权限被拒绝(publickey).致命:无法从远程存储库读取.
Please make sure you have the correct access rights
and the repository exists.
Clone of 'git@bitbucket.org:mycomp/portal_air.git' into submodule path 'include/portal_air' failed
hudson.plugins.git.GitException: Command "C:\CI\Git\bin\git.exe submodule update" returned status code 1:
stdout:
stderr: …Run Code Online (Sandbox Code Playgroud) 我正在尝试将mercurial存储库迁移到git,但问题是mercurial存储库有子存储库(一些有分支),还有很多合并和分支本身.我希望最终的git存储库能够保留所有这些历史记录,并且在检出存储库或其他分支的早期部分时是正确和完整的.我不需要新的存储库有子模块或子树,虽然我也会接受使用它的解决方案.我看到的一些方法将新repo顶部的所有子站点合并为分支,这意味着过去的签出不包含子目录中的所有文件.我也尝试将所有内容导入为分支,将头部重置为过去,合并和重新定位,但是有太多的合并并且出现了许多冲突,即使使用--preserve-merges,所以我宁愿避免这种情况.我也找不到任何方法在git中复制mercurial子库更新历史作为子模块更新历史记录.有没有人有任何想法?谢谢.
考虑一个在git存储库中组织的C++项目.假设git存储库有一个子模块,从该子模块构建(超级)项目所依赖的库.如果(超级)项目不仅依赖于库而且依赖于使用特定(CMake)参数构建的库,那么在构建(超级)项目时如何确保使用这些参数构建子模块?
我感到困惑的是我还没有找到一个问题,因为这似乎是很普遍的情况。我可能忽略了它。存在类似的问题(例如这一问题),但是它们似乎都有不同的目标和约束。
我正在编写将另一个项目用作git子模块的代码。(简化的)情况如下所示:
.
??? A.py
??? sub
??? B.py
??? C.py
Run Code Online (Sandbox Code Playgroud)
文件的内容如下;
import sub.B
print(sub.B.x)
Run Code Online (Sandbox Code Playgroud)
import C
x = C.y * 2
if __name__ == '__main__':
print(x)
Run Code Online (Sandbox Code Playgroud)
y = 7
Run Code Online (Sandbox Code Playgroud)
当我尝试执行时A.py,它告诉我:
File "/Users/Joost/poc/sub/B.py", line 1, in <module>
import C
ImportError: No module named 'C'
Run Code Online (Sandbox Code Playgroud)
自然,当我修改B.py为Cfrom 实际得到时,它就可以正常工作sub.C。但是,就像sub第三方的子模块一样,我无法做到这一点。而且,它将破坏子模块的功能。
解决这个问题的正确方法是什么?