mkdir topdir
mkdir another-git-directory
touch fileC
touch fileD
git add.
git commit -m"sub-dir init"
cd ..
touch fileA
touch fileB
git add.
git commit -m"top-dir init"
git ls-files
//现在我们可以看到fileC和fileD没有被顶级git跟踪//
git ls-files -o
//这不会向我们展示fileC和fileD as untracked files //
我的问题是:如何让"git ls-files -o"显示子目录中未跟踪的文件?为什么git表现得如此,因为我希望git ls-files显示所有未跟踪的文件(即使它在另一个sub-dir git中)?
我知道我可以使用"git add*/."来制作顶级git来跟踪sub-dir文件......但我很想知道上面这个问题的原因.谢谢!
目录结构
Run Code Online (Sandbox Code Playgroud)topdir + +-- .git +-- fileA +-- fileB + another-git-directory +-- .git +-- fileC +-- fileD
我发现这个线程无法跟踪Git子模块中的文件和这个url(cn)http://blog.ossxp.com/2010/01/425/,它解释了如何解决问题.
解决方案:
git rm --cached another-git-directory #no trailing slash
git add another-git-directory /. …
开始:
$ cat .gitmodules
[submodule "utils/external/firepython"]
path = utils/external/firepython
url = git://github.com/darwin/firepython.git
[submodule "utils/external/textile"]
path = utils/external/textile
url = git://github.com/jsamsa/python-textile.git
Run Code Online (Sandbox Code Playgroud)
虽然这仍然是一个Git回购,我需要运行git submodule init,之后会发生一些魔法.由于我现在将回购转换为Mercurial(使用hgext.git扩展名),我不知道该怎么做.是否有一个等效的过程(我需要在我的Mercurial仓库中使用这两个Git模块)?
我有一个hg存储库,带有一个hg子存储库,它有一些git子模块.(我知道这听起来很疯狂,但它正在使用谷歌代码中的svn repos,github中的libs和bitbucket中的模块.我正在使用由一群人自由提供的代码,我是谁来抱怨他们的决定版本控制 - 我想要的是代码,我很感激.
关于这种情况的一点"树":
+ hg repo
+ hg subrepo
+ git submodules
Run Code Online (Sandbox Code Playgroud)
当我更改hg子存储库中的文件并提交时,它会提交所有git子模块,即使它们没有被更改.我已经运行了hg status,它没有显示任何关于git子模块的信息,但如果我提交:
committing subrepository SUBREPO
Run Code Online (Sandbox Code Playgroud)
如果我只使用一个带有一堆git子模块的hg主回购,那就不会有问题了.当我在第一个hg存储库中进行更改时,问题依赖于:现在,当我提交时,它会在hg存储库和hg子存储库中提交,因为它总是提交git子模块.所以现在,我有一个评论,设计只在第一个hg存储库,并在hg子存储库中的相同注释.
对于我committing subrepository SUBREPO使用git子模块在hg repository/subrepository上进行的每次提交,我如何避免这种干扰?这是一个错误吗?这是一个git设计(也许git存储库总是至少改变一个"状态"文件或类似的东西,总是在拉动后改变?我没有太多的git经验...)
我们使用Visual Studio 2010(在C#中)进行开发,并在不久前从SVN迁移到GIT.现在我们尝试将我们的存储库(相当大的~~30,000个文件)拆分为许多git存储库 - 每个解决方案一个.这些解决方案共享一些项目,主要是我们在内部开发的库,并希望从所有解决方案中添加.
新的存储库具有平面布局.每个项目的一个子目录(共享项目是子模块).在大型旧仓库中,项目采用树形结构.
子模块中的外部引用会出现问题.在新的repos中,引用项目的路径可能是"...... libs\someproject",而在新布局中,正确的路径是"..\someproject".
我们已经有过一些与此有关的编辑大战,并不热衷于此.
我能想到的半生不熟的解决方案:
在... csproj.user中使用"引用路径"并从版本控制中排除此文件(必须为每个开发人员重做并在每次清理后进行重做)
为每种情况使用分支,并尝试教每个人应该去哪里"真正的"提交以及"环境变化"提交应该去哪里(子模块已经不是最简单的概念......)
嵌入二进制文件而不是子模块(但是开发子模块的更改呢?不同的log4net版本呢?)
有谁知道一个理智的解决方案?
我正在尝试将git子模块添加到我的项目中,特别是ShareKit.我的项目是一个git repo,当我尝试输入时
git submodule add git://github.com/ShareKit/ShareKit.git Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)
进入终端我得到一个错误,说子模块已经存在.我想我刚刚在这个项目中添加了它,并最终没有使用它并且不正确地从项目目录中删除它(最有可能删除子模块文件夹).所以我尝试着做
git rm --cached Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)
根据如何删除子模块?,现在当我尝试使用第一段代码再次添加子模块时,我得到了这个:
A git directory for 'Submodules/ShareKit' is found locally with remote(s):
origin git://github.com/ShareKit/ShareKit.git
If you want to reuse this local git directory instead of cloning again from
git://github.com/ShareKit/ShareKit.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
Run Code Online (Sandbox Code Playgroud)
而且我不确定该怎么做.我对git很新,我需要在我的项目中得到这个 - 有没有办法只是擦除项目中的所有git并从头开始?我只是用一个新项目做到这一点,但除此之外它已经非常完整,从头开始并将所有内容复制完毕将非常耗时.我让ShareKit在测试应用程序中工作,安装正确,有什么理由我不能将该文件夹中的所有ShareKit文件复制到我需要的文件夹中吗?
编辑:我试过了
git submodule deinit Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
error: …Run Code Online (Sandbox Code Playgroud) 我想知道与其他程序员共享Prolog代码/库的最佳实践(以及多个项目之间的自己).我自己也在使用SWI-Prolog,但也对其他Prolog如何解决这个问题感兴趣.
相比之下,Java有Maven + JAR,Python有EasyInstall + PythonEggs,其他语言可能还有很多其他语言.但Prolog还有吗?
在SWI-Prolog中有Packs,由模块支持library(prolog_pack).这些的缺点是:
另一种我直到现在使用过的方法是Git子模块.通过将一个存储库导入另一个存储库来实现库之间的依赖关系.这与SWI-Prolog包有一些相同的缺点:
我个人对完美的Prolog代码共享方法的偏好是:
以上暗示我理想的库共享方法是基于文件的,而不是基于包的.如果Prolog模块A使用Prolog模块B并且加载了A,则从本地文件(如果存在)加载B或从存储库下载B. 我不确定基于文件的方法在其他语言中有多常见.前面提到的Maven + JAR和EasyInstall + PythonEggs都是基于包的.
我对其他Prolog程序员使用和思考这个主题非常感兴趣!
我刚刚git merge <merging_branch_name>在应用程序中完成了一个并解决了许多冲突.
但是当我这样做时git status,我可以在消息中看到带有(新提交)的子模块列表.看起来子模块(分支/标签)版本尚未更新.
例如:
modified: plugins/myplugin.git (new commits)
Run Code Online (Sandbox Code Playgroud)
如何使用版本更新子模块(带<merging_branch_name>)
我在git bash中得到这样的结果
my_app (current_branch |MERGING),
Run Code Online (Sandbox Code Playgroud)
所以,当我这样做时git status,我得到子模块列表,如下所示
modified: plugins/plugin1.git (new commits)
modified: plugins/plugin2.git (new commits)
modified: plugins/plugin3.git (new commits)
modified: plugins/plugin4.git (new commits)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我有一个目录/amp中RepoA和RepoB(与/放大器的内容填充最初).我想将/ampRepoA中的任何更改镜像 到RepoB.
可能吗 ?
PS:RepoA包含许多其他目录.我只想镜像/ amp dir.而RepoB只会有/ amp内容而不是其他内容.
我的项目分为gitmodules,如下所示:
/ +
|
+-module_1
| |
| +- cloudbuild.yaml
| +- src/
| +-.git/
|
+-module_2
| |
| +- cloudbuild.yaml
| +- src/
| +-.git/
|
+- .git/
+- .gitmodules
+- cloudbuild.yaml
Run Code Online (Sandbox Code Playgroud)
我正在尝试从父存储库构建子模块,但cloudbuild有一个问题,因为它不会自己获取gitmodules.因此,当我module_1/cloudbuild.yaml作为cloudbuild配置引用时,构建失败,因为该文件不存在.我正在考虑可能的解决方法,我想问下列是否可行:
/cloudbuild.yaml为构建配置结果应该类似于:
steps:
- name: 'gcr.io/$PROJECT_ID/git'
args: ['submodule', 'update', '--init']
- name: 'some kind of command that runs cloudbuild.yaml`
args: ['module_1/cloudbuild.yaml']
Run Code Online (Sandbox Code Playgroud)
免责声明 我知道我可以将所有cloudbuild配置放在根存储库中,但我希望这些模块尽可能地自我管理
git google-app-engine git-submodules google-cloud-platform google-cloud-build
git-submodules ×10
git ×9
mercurial ×2
dvcs ×1
git-merge ×1
git-subtree ×1
github ×1
module ×1
move ×1
prolog ×1
swi-prolog ×1
windows ×1