基本上我已经阅读了git merge冲突指南,我不确定它是否直接解决了我的情况.我在子模块中存在冲突,我只想使用他们的版本,我理解的是git diff -3 app/bundles如何使用子模块的版本,解决冲突并提交?
~/projects/sms/admin(rc)$ git diff
diff --cc app/bundles
index 999fd0a,ae6acdc..0000000
--- a/app/bundles
+++ b/app/bundles
~/projects/sms/admin(rc)$ git diff -1 app/bundles
* Unmerged path app/bundles
diff --git a/app/bundles b/app/bundles
index b34a733..999fd0a 160000
--- a/app/bundles
+++ b/app/bundles
@@ -1 +1 @@
-Subproject commit b34a73375b4dfed6086d26d205ab5535acece053
+Subproject commit 999fd0a307e6d8d517ddf3dd6fab28a3ac0ec2c9
~/projects/sms/admin(rc)$ git diff -2 app/bundles
* Unmerged path app/bundles
~/projects/sms/admin(rc)$ git diff -3 app/bundles
* Unmerged path app/bundles
diff --git a/app/bundles b/app/bundles
index ae6acdc..999fd0a 160000
--- a/app/bundles
+++ b/app/bundles
@@ -1 …Run Code Online (Sandbox Code Playgroud) 我有一个git存储库(A),其中包含我需要在第二个存储库(B)中重用的库代码.
我的理解是git子模块不允许仅导入存储库中的特定路径,需要导入整个存储库.它是否正确?
因此,我看到了两个问题的解决方案:
第二种方法有哪些优点?在我看来,为小型库添加一个单独的存储库是一种过度杀伤,可能会给项目维护带来不必要的负担.有没有更好的方法来解决我的问题?
注意:我没有此存储库的任何先腐败克隆.我相信我的情况与此处描述的不同,因为我错过了一棵树,而不是一块树.
发生了什么:
当我尝试通过LAN克隆存储库(通过SSH)时,Git返回错误,说明存储库已损坏:
remote: error: object file ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4 is empty
remote: fatal: loose object 2e223ce259e9e33998d434acc778bc64b393d5d4 (stored in ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4) is corrupt
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
Run Code Online (Sandbox Code Playgroud)
我找到了git fsck可用于诊断腐败的地方,但它并没有告诉我任何新的东西:
git fsck --full
error: object file ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4 is empty
fatal: loose object 2e223ce259e9e33998d434acc778bc64b393d5d4 (stored in ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4) is corrupt
Run Code Online (Sandbox Code Playgroud)
我已经尝试在本地克隆存储库(使用--no-hardlinks)以查看发生了什么,但我得到了完全相同的结果.
然后我偶然发现了这个问题,回答的人刚刚删除了空文件(步骤3),所以我做了这个(即我已经223ce259e9e33998d434acc778bc64b393d5d4 …
我有一个gitsubmodule,我无法正确卸载。(在这里猜测)。我添加了一个同名子树。一切顺利,直到我应该暂存文件为止。
$git status /*Shows unstaged files just fine*/
$git add . /*Prints error message*/
fatal: Not a git repository:MyProject/SLibrary/../.git/modules/SLibrary
Run Code Online (Sandbox Code Playgroud)
我如何摆脱错误消息的任何想法,所以我可以使用git add -a /登台文件。
git submodule在Linux上使用时,我可能会.gitmodules从例如/mnt/gitrepos/subsystem1.git(基于中心文件的访问)中检出一个或多个子系统.
[submodule "subsystem1"]
path = subsystem11
url = /mnt/gitrepos/subsystem1.git/
Run Code Online (Sandbox Code Playgroud)
我还想支持一个可以访问相同模块repo的Windows用户H:/gitrepos/subsystem1.git/.
例如,来自Linux的Samba共享/mnt/gitrepos/作为共享gitrepos.
有没有办法让Git可以根据操作系统处理URL行?对于Windows,.gitmodules将是
[submodule "subsystem1"]
path = subsystem11
url = H:/gitrepos/subsystem1.git/
Run Code Online (Sandbox Code Playgroud)
因此,我希望"类似"这个通用代码.gitmodules(推测语法):
[submodule "subsystem1"]
path = subsystem11
if Linux
url = /mnt/gitrepos/subsystem1.git/
else
url = H:/gitrepos/subsystem1.git/
Run Code Online (Sandbox Code Playgroud) 也许我没有故意使用git-submodules,但如果有任何其他git功能满足我的情况,那么很高兴找到它.
在克隆存储库之后,我希望子模块在master分支中,我永远不会在chef-starter子模块中存储任何其他文件.
git clone git@github.com:holms/vagrant-starter.git
git submodule update --init
cd chef-starter
git branch
* (detached from 0b6a803)
master
Run Code Online (Sandbox Code Playgroud)
我确实理解这是一个很好的功能,分别跟踪该子模块目录树,但它不是我的情况.在主存储库克隆之后,我只想将该子模块克隆到最新的主阶段而不需要任何额外的麻烦.
我怎样才能做到这一点?
是否有命令为所有现有的 Git子模块设置相同的分支名称
git submodule add -b develop *
Run Code Online (Sandbox Code Playgroud)
基本上,我需要一种方法来递归设置.gitmodules文件中每个模块的分支。
我是一位经验丰富的Go开发人员和Git用户,但有些东西我似乎无法理解.
通常我的团队使用.gitmodules包依赖,这是一个成功的模式,因为它指向一个确切的提交.以这种方式为我们解决了整个"售卖问题".
但是,我最近创建了一个项目,用于go get从GitHub获取各种包而不是使用git submodule add.我完成了项目,将所有内容都提交给了我的git repo,但是当一个队友克隆了repo时,依赖项的源代码丢失了.
通常我会说"哦,你忘了跑git submodule update --init",但当然它们不是子模块.所以...我可以告诉他跑步go get -u或者什么(对吗?)但这意味着我受到依赖者的主分支的支配 - 进入vendoring.
我真正的问题是:当我打包然后将其提交到我的存储库时,实际发生了什么go get?它没有被提交到我的源代码树中,它不是一个子模块......我不知道它到底是什么!go getGit在这里表现和交互的确切方式是什么?
奖金回合:你为什么要这样做?在什么情况下,您希望将另一个项目提交到您的仓库中,以便强制新的检出每次都提取最新版本的源?
我在只读文件系统中使用git plumbing和镜像(因此是裸机)存储库。
我可以看到带有的子模块git ls-tree。我可以推断出它们的名称/路径和SHA1,但是找不到找到远程子模块的方法。
信息在某处。如果我克隆回购协议,那就git submodule init成功了。(进行克隆对于正常使用而言太昂贵了,特别是对于非常大的存储库而言。)如何直接从远程获得子模块?
我的问题是关于子项目,并与他们在bazel中的依赖关系一起工作.
我有一个我正在研究的c ++项目.称之为项目A.
项目A取决于我正在研究的另外两个人,B和C.
项目B还取决于项目C.
所以它看起来像这样.
A -> (B, C)
B -> (C)
C -> no external dependencies
Run Code Online (Sandbox Code Playgroud)
我希望能够并行处理这3个项目,但我希望让它们保持独立.
我尝试了几种设置方法:
来自我的WORKSPACE文件中git的外部依赖项.这里的问题是,当我希望对它们进行更改时,就好像它们是一个更大的项目一样,它们不会保持同步.工作流程也很不稳定,不断切换目录,推送我的存储库,回到另一个,并潜在地拉(如果bazel决定这样做,仍然不知道如何强制它).
存储库中的Git子模块和外部依赖项.这里的问题是在CLion或我用来跳转到引用的任何地方实际上从某个地方创建的bazel缓存中获取它的引用,而不是我想要提交的实际repo.
Git子模块,子模块只是我依赖的包.这将是我最喜欢的解决方案,但是如果我这样做,每个子模块中的BUILD文件(都存储在third_party或其他目录中)都是无效的,因为它们本身依赖于外部依赖性.例如,项目B在我正在使用的工作空间中包含C作为外部依赖项,但在此工作空间中C是一个包.我能想到管理这种情况的唯一方法是以这种方式重写Bazel库所包含的每个包的所有构建文件.这似乎没有效果.
我知道在谷歌我们使用不同版本的这个并且我们将它全部保存在内部工作区中,但是必须有一个解决方案让bazel这样做.
git ×10
git-submodules ×10
bazel ×1
c++ ×1
clion ×1
corruption ×1
git-merge ×1
git-plumbing ×1
git-subtree ×1
go ×1
recovery ×1