我正在研究一个使用多个应用程序(python模块)的django项目.大多数python模块都由其他人在自己的git存储库中维护.我使用git-submodules命令将它们导入到'apps'目录下的项目中,如下所示:
mysite/
mysite/apps
mysite/apps/django-extensions
mysite/apps/django-celery
mysite/apps/django-comments
mysite/apps/myapp
...etc
Run Code Online (Sandbox Code Playgroud)
大多数子模块(例如django-extensions)都有一个包含实际python模块的子文件夹:mysite/apps/django-extensions/django_extensions
这意味着我不能简单地将我的python路径设置为包含mysite/apps - 我必须将其设置为包含mysite/apps/django-extensions,以便它可以导入django_extensions子文件夹.
打字令人烦恼:
PYTHONPATH=mysite/apps/django-extensions:mysite/apps/django-celery... python manage.py runserver
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来布置我的回购?一个简单的过程?只是为了好玩,我尝试了一个mysite/apps/*的PYTHONPATH,但这不起作用.
我想弄清楚为什么git submodule foreach命令不适合我.我克隆了一个有几个子模块的git存储库.我想一次初始化并更新所有子模块以下拉子模块源.但无论我尝试git submodule foreach都不适合我...我尝试了几件事:
git submodule foreach init
git submodule foreach update
git submodule foreach update --init
git submodule foreach --recursive git submodule update --init
Run Code Online (Sandbox Code Playgroud)
每个命令都会执行但没有任何输出......如果我单独初始化/更新每个模块(不使用foreach)那么没问题.
有任何想法吗?
多年来,这已经被问过很多次,但从未见过真正的答案。
我想将一些开源代码作为子模块添加到我现有的项目中,但我只能使用特定的提交 SHA1。
我已经建立了一个例子来演示这个问题。
所以,我的主要项目是:
https://github.com/BitvuLtd/myProj
Run Code Online (Sandbox Code Playgroud)
如您所见,该项目中有一个子模块指向:
https://github.com/BitvuLtd/strangersPro/tree/bd06980e0d711348bc7831f6421b3c5b27948781
Run Code Online (Sandbox Code Playgroud)
我想指出该行的下一个提交:
https://github.com/BitvuLtd/strangersPro/tree/1463dd07645ce4e0450aabaa952b4c657d
我不想要最新的提交,因为它不兼容。
我最接近的是能够使用以下命令在子模块的单独克隆副本中检出正确的提交:
git checkout 1463dd07645ce4e0450aabaa952b4c657d16da39
Run Code Online (Sandbox Code Playgroud)
但是如果我在主项目的子模块目录中这样做,它会得到:
fatal: reference is not a tree: 1463dd07645ce4e0450aabaa952b4c657d16da39
Run Code Online (Sandbox Code Playgroud) 我写了一个python模块。它驻留在一个回购。现在要运行模块的单元测试,它们不能是该模块的子文件夹。解决此问题的建议结构是:
ModuleRepo/
MyModule/
__init__.py
some_utils.py
import .some_helpers
some_helpers.py
Tests/
some_utils_test.py
import MyModule.some_utils
some_helpers_test.py
import MyModule.some_helpers
Run Code Online (Sandbox Code Playgroud)
现在效果很好。如果我运行测试,他们就可以导入模块。该模块能够通过前置 '.' 导入自己的文件(例如:some_helpers)。表示本地文件夹。
问题是一个不同的 repo 现在想要共享这个模块,我不知道如何让它找到该模块。
例如:
ModuleRepo/
MyModule/
__init__.py
...
Tests/
...
AnotherRepo/
using_my_module.py
import ??? <-- how to find MyModule?
Run Code Online (Sandbox Code Playgroud)
不工作的尝试 #1: 我最初尝试使用 git 的子模块功能将 ModuleRepo 包含在 AnotherRepo 下。但是我实际上并不想要ModuleRepo的根文件夹,我只想要子文件夹“MyModule”。事实证明 git 的子模块并没有这样做 - 一个人不能只选择要包含的回购的一部分。
不受欢迎的符号链接:虽然符号链接可能有效,但它不能“提交”到存储库,因此有些不受欢迎。此外,我正在 Windows 和 Linux 上进行开发,因此我需要一个适用于两者的解决方案。
可能的解决方案:将 ModuleRepo root 也变成一个模块(添加一个init .py)。然后我可以使用 git 使其成为 AnotherRepo 的子模块。我的导入会很丑,但它会是: import my.module.some_utils 而不是 import mymodule.some_utils
有没有人有更好的解决方案?
我有一个 repo,其中有一个子模块。
我可以轻松地从工作目录中获取子模块的当前哈希值:
cd submodule
git rev-list HEAD | head -n 1
Run Code Online (Sandbox Code Playgroud)
但是,我也对主 repo 以前版本的哈希感兴趣。如果我实际查看该版本,我可以得到它:
git checkout some_tag
cd submodule
git rev-list HEAD | head -n 1
Run Code Online (Sandbox Code Playgroud)
但是,我不能使用git checkout。有没有办法在不检查旧标签的情况下获得该哈希值?
我最近将一个存储库放入 bitbucket。这个存储库有一些子模块
我正在处理初始化脚本。我想克隆主目录并拉取所有子目录。
git clone https://bitbucket.org/#####/main.git elastic --recurse-submodules
Run Code Online (Sandbox Code Playgroud)
这提示我输入用户名和密码。
Username for 'https://bitbucket.org': myuser
Password for 'https://myuser@bitbucket.org':
Run Code Online (Sandbox Code Playgroud)
他们再次询问我每个子模块
Username for 'https://bitbucket.org':
...
Run Code Online (Sandbox Code Playgroud)
我的 .gitmodules 文件是这样的:
[submodule "api"]
path = app/api/
url = git@bitbucket.org/###/api.git
branch = master
[submodule "front"]
path = app/front
url = git@bitbucket.org/###/front.git
branch = master
[submodule "app/config"]
path = app/config
url = git@bitbucket.org/###/config.git
branch = master
... some few more repositories
Run Code Online (Sandbox Code Playgroud)
如何克隆主存储库,并且它们对所有子存储库使用相同的凭据?
我正在使用 AWS AMI Linux。
git clone my-new-repo-url
mkdir deps
cd deps
git submodule add -b 6.2.0 https://github.com/leethomason/tinyxml2.git
Run Code Online (Sandbox Code Playgroud)
产量
fatal: 'origin/6.2.0' is not a commit and a branch '6.2.0' cannot be created from it
Unable to checkout submodule 'deps/tinyxml2'
Run Code Online (Sandbox Code Playgroud)
不填充 .gitmodules,而是创建一个文件夹.git/modules/deps/tinyxml2并在其中添加一个 repodeps/tinyxml2
我以为我以前这样做过,它会填充 .gitmodules
[submodule "deps/tinyxml2"]
path = deps/tinyxml2
url = https://github.com/leethomason/tinyxml2.git
branch = 6.2.0
Run Code Online (Sandbox Code Playgroud)
但它现在不起作用怎么办?
我在另一个模块中有一个git子模块,通过git submodule add <...>(从父仓库发出的命令)添加,因此该.gitmodules文件是在父仓库内部自动生成的。
假设我对子模块进行了更改(编辑:并且不提交这些更改),然后导航回到父模块git add -A,然后执行,然后git status,它说“未上演提交更改:子模块目录名称 ...等”。
我以为git会读取.gitmodules文件(父git生成的文件!),意识到它是git子模块目录,因此当我向父请求状态时不提及其未暂存状态吗?
我们搭建了一个Asp.net核心微服务项目,将代码组织成一个超级项目和多个Git子模块(每个微服务就是一个子模块)。现在我们要开始使用 Git Flow 工作流。
初始化 gitflow 的最佳方法是什么?我们是否需要每个子模块有一个 git 流,或者我们应该在超级项目级别有一个全局 git 流?
谢谢!
假设我有 10 个子模块:
module/1
module/2
module/3
module/4
module/5
module/6
module/7
module/8
module/9
module/10
Run Code Online (Sandbox Code Playgroud)
module/顶级回购在哪里。
我想做git submodule foreach 'git status',但我不想为子模块 4、6 和 7 做。
有没有办法做到这一点,比如:
git submodule foreach --exclude="4 6 7" 'git status'
我尝试在命令块内使用
git submodule foreach '
if [[ $list_of_ignores =~ *"$displayname"* ]] ; then echo ignore; fi
'
Run Code Online (Sandbox Code Playgroud)
更新- 删除--exclude="4 6 7"了意外在那里
但是我收到错误说eval [[: not found- 我假设这是因为它使用 /bin/sh 而不是 /bin/bash?- 没有把握...
git ×10
git-submodules ×10
python ×2
django ×1
foreach ×1
git-flow ×1
linux ×1
module ×1
project ×1
repository ×1