组件驱动开发术语开始被广泛使用,尤其是 与控制反转有关.
使用Git,我想在我的项目中包含一些常见的JS/CSS库和/或实用程序方法(即来自另一个repo的特定文件),我希望它能让它们始终保持最新状态.我真的不想要整个远程存储库.如果我可以处理远程文件的"本地副本"并将更改重新推送,则可以获得奖励.
一个有点平行的例子:在ASP.NET中,我会通过引用("远程")其他库的.dll文件(没有"copy local")来做到这一点,这样每当我重新编译外部库时,我的项目就会指向最新的版本.
我的项目是...... MyProject,我只想要外部存储库ExternalLibrary和External2中的几个文件.我不想在其他地方克隆每个存储库,并将文件复制粘贴到我的存储库中.如果我做了改进MyProject/scripts/common1.js,我想把它推回到ExternalLibrary.
相关参考:
今天我们在本地TFS服务器上拥有所有源代码.现在我们希望一些外部方可以访问部分代码.因此,我们考虑将例如克隆到他们可以访问的外部GIT服务器的可能性.
我看过git-tfs.但是如果我理解正确的话,当它们发生任何变化时,你必须手动同步GIT和TFS.有没有办法克隆自动同步的代码.
如果TFS有变化,它会自动同步到GIT,反之亦然.如果我使用最新的代码,应该没有不确定性
我有一个项目需要分成两个存储库:一组通用模型,以及基于这些模型的模拟,以及其他代码.最终可能会有多个模拟使用同一组模型,因此将它们放在一个单独的存储库中是一个明确的要求.显而易见的解决方案是将通用模型作为模拟的子模块.
不幸的是,这两个库的工作将非常高度耦合.人们会经常在他们的常见模型中添加一些东西,然后立即在模拟中使用它.我想这会在模拟回购的整合过程中引起很多麻烦.为了在模拟中合并来自许多开发人员的更改,集成商将不得不在通用模型子模块中进行并行合并.另一方面,它也使得使用子模块变得至关重要 - 模拟真的需要知道它应该使用哪个版本的常见模型.
该项目由相当多的人开展.大多数开发人员只对git有一个非常粗略的了解:他们添加文件,提交和从源头拉取很多东西,并希望有一个开发和稳定的分支.积分器自然学到了很多东西,但任何涉及子模块的东西对他来说肯定都是新的.额外的奖励:我即将休假一个月,所以我将无法扑灭任何火灾.结果是,有很多动机使工作流程变得非常难以搞砸,并最大限度地减少与以前工作流程的差异.
所以,我的问题是:我是否会后悔建议我们使用子模块?(有更好的想法吗?)我可以期待人们犯下什么样的错误,所以我可以提前警告他们?是否有任何好的工作流程策略要记住?
编辑:我刚遇到git slave,在这种情况下也许值得一看.还不能对其网站上的能力/限制进行良好的评估.
我有一个带有一些子模块的项目.其中许多是从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) 我有一个网站项目,在一些目录中有超过50,000个不重要的文件(开发).
/website.com/files/1.txt
/website.com/files/2.txt
/website.com/files/3.txt
/website.com/files/etc.txt
Run Code Online (Sandbox Code Playgroud)
/ files中的内容已经在repo中.我想删除本地副本上的/ files中的所有文件,但是我希望git忽略它,所以当我在Web服务器上拉动时它不会删除它们.
有任何想法吗?
假设以下项目布局: -
mainrepo_git
|____ .git
|____ .gitmodules
|____ proj <------- directory containing the code files for mainrepo
|____ 3rdpartysourcecode <-- directory containing upstream open source code
| |____ .git
| |____ 3rdpartyfiles
|
|____ mainrepofilesanddirectories
Run Code Online (Sandbox Code Playgroud)
mainrepo_git包含我直接负责的源代码.我有读/写访问权限,可以直接推送到我管理的远程git存储库.
嵌套在mainrepo_git中的是一个名为3rdpartysourcecode的目录.这个3rdpartysourcecode目录实际上是另一个git repo(通常也称为"git submodule"),它指向由其他开发人员管理的开源第三方git存储库.我只有读取权限.没有写访问权限.
有没有办法'冻结'git子模块的特定提交哈希与我的主存储库中提交的相关?
例如,如果我在(或我恢复)在我的mainrepo中提交a12ucak,我的git子模块也会被恢复为特定版本,我将其绑定为提交a12ucak?当我切换到提交b349jdsak时,我的git子模块也会恢复到我绑定到b349jdsak的版本?
所以我的问题是:有一种方法可以在主仓库中的特定提交与git子模块中的相应提交之间创建链接吗?以这种方式,当我在主git repo中检出特定提交时,git子模块中的相应提交也将是checkout.
有很多网页在那里暗示让svn外部看起来像git子模块的hackish方法.我已经读过一些关于差异的说法,但这似乎不是很基础:
Git子模块链接到另一个项目的存储库中的特定提交,而svn:externals总是获取最新的修订.
为什么这种差异会使它们根本不相容?我们可以假设没有合理的默认值,例如大多数svn:externals指向永不移动的标签吗?
有没有办法git pull存储库中的所有文件夹,但有一个?我不想创建一个.gitignore文件,因为其他人可能想要这个文件夹 - 它现在对我来说太大了.
谢谢!
我们已经将一个子目录S变成了一个单独的仓库,并将其重新添加为分支B中的子模块.现在,当我想切换回原始分支A时,子目录被检入原始仓库,git抱怨来自子模块的东西是未跟踪的,必须先将其移走.我们可以切换回A,而无需手动拖动S并将它移回B中吗?
更新:下面的评论表明它可能是旧分支的缺陷,并且git不愿意在这里做一件聪明的事情.是这样的,在主回购中使用S的原始分支有什么样的变基(如果有的话)可以让它在任何时候与子模块化版本共存并且可以结账吗?
git ×9
cloning ×1
components ×1
delete-file ×1
git-clone ×1
git-remote ×1
git-svn ×1
git-tfs ×1
ignore ×1
organization ×1
paradigms ×1
svn ×1
tfs ×1
tfs2013 ×1
web ×1
workflow ×1