我有兴趣为我的组织维护一个Maven 2存储库.有哪些指针和陷阱会有所帮助.
在发布代码时,在设置从库中下载或将自己的工件发布到存储库的标准时,用户应遵循哪些准则?您为此类事物制定了哪些治理/规则?您在开发人员指南/文档中包含了哪些内容?
更新:我们已经站起来并且非常满意它 - 遵循Sal的大部分指导方针并且没有遇到任何麻烦.此外,我们通过Hudson CI服务器限制了部署访问和快照构件的自动构建/部署.Hudson可以分析所有上游/下游项目依赖项,因此如果编译问题,测试失败或其他一些违规导致构建中断,则不会发生部署.厌倦了在Maven2/Maven3中进行快照部署,因为元数据在两个版本之间发生了变化."仅限Hudson"快照部署策略将缓解这种情况.我们不使用Release Plugin,但是在将快照移动到发布时,已经在Versions插件中编写了一些代码.我们也使用m2eclipse,它似乎与Nexus很好地配合,因为从设置文件中它可以看到Nexus并且知道从那里索引工件信息以进行查找.(虽然我不得不调整其中的一些设置以使其完全索引我们的内部快照.)如果您对此感兴趣,我还建议您使用您的工件部署源jar作为标准做法.我们在超级POM中配置它.
更新2:我遇到过这篇Sonatype白皮书,其中详细介绍了采用/成熟的不同阶段,每个阶段都有一个Maven资源库管理器的不同使用目标.
我正在从集中式SCM系统切换到GIT.好的,我承认哪一个,它是Visual SourceSafe.因此,除了克服Git命令和工作流的学习曲线之外,我目前面临的最大问题是如何将我们当前的存储库迁移到Git,关于单个或某些类型的多个存储库.
我已经通过各种方式看到了这个问题,但通常只是基本..."我有应用程序想要共享一些较低级别的库"并且预制响应总是"使用单独的存储库"和/或"使用Git子模块"没有太多解释何时/为什么应该使用这种模式(它克服了什么,它消除了什么?)从我对Git的有限知识/阅读到目前为止,似乎子模块可能有自己的恶魔来战斗,特别是对于刚接触Git的人.
然而,我还没有看到有人公然问的是,"如果你有传统的n层开发(UI,业务,数据,然后是共享工具),每个层都是自己的项目,你应该使用一个或多个库?" 我不清楚,因为几乎总是,当添加一个新的"功能"时,代码更改会波及每一层.
为了使与Git相关的问题复杂化,我们在"框架"中复制了这些层,以便从开发人员的角度制定更易于管理的项目/组件.出于本讨论的目的,我们将这些项目/图层集合称为"Tahiti",它代表整个"产品".
我们设置的最后一个"层"是增加了对塔希提岛进行定制/扩展的客户网站/项目.在文件夹结构中表示这可能最像是:
/Clients
/Client1
/Client2
/UI Layer
/CoreWebsite (views/models/etc)
/WebsiteHelper (contains 'web' helpers appropriate for any website)
/Tahiti.WebsiteHelpers (contains 'web' helpers only appropriate for Tahiti sites)
/BusinessLayer (logic projects for different 'frameworks')
/Framework1.Business
/Framework2.Business
/DataLayer
/Framework1.Data
/Framework2.Data
/Core (projects that are shared tools useable by any project/layer)
/SharedLib1
/SharedLib2
Run Code Online (Sandbox Code Playgroud)
在解释了我们如何通过多个项目扩展传统的n层设计之后,我正在寻找任何关于你在类似情况下做出的决定的经验(甚至简单的用户界面,业务,数据分离就是你的全部因为你的决定,更容易/更难.在初步阅读中,子模块有多痛苦,我是否正确?比痛苦更有益吗?
我的直觉反应是塔希提岛的一个存储库(所有项目除了'客户项目'),然后是每个客户的一个存储库.我猜的整个大溪地来源必须是<10k文件.这是我的推理(我欢迎批评)
提前致谢.
git visual-sourcesafe repository repository-design visual-studio
我的问题总结:在我将两百个字节添加到两个现有文件之后,我在Bitbucket上的一个私有存储库的大小突然增加了一倍多.回购现在超过2GB,这使得Bitbucket将其置于只读模式.因为它处于只读模式,所以我无法推送会降低repo大小的更改.(Catch 22.)
详细信息:我公司最近开始在Bitbucket上托管git存储库.我负责的其中一个存储库大小约为973MB,这令人不安地接近1GB的软限制.为了减少repo大小,我按照Bitbucket文档文章中的说明将一个存储库分成两部分,并将大约450MB的文档和在线帮助文件移动到他们自己的私人仓库中.然后,我按照Bitbucket文档文章中的说明减少存储库大小和维护一个git存储库,具体来说:
git count-objects -vH 给我看了一个大约973MB的大小包.
我跑去git filter-branch --index-filter 'git rm --cached --ignore-unmatch doc' HEAD删除doc目录(这是我移动到新repo的内容).
我运行以下命令使参考和修剪过期:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)
git count-objects -vH然后给我看了一个881.1 MiB的尺寸包,du -sh .git/objects返回882M.我感到失望的是,移动450MB以上的回购大小减少了不到90MB,但是仍然把改变推到了Bitbucket:
git push --all --force
git push --tags --force
Run Code Online (Sandbox Code Playgroud)
repo的Bitbucket副本的设置页面继续显示973MB的大小.我退出了,刷新了浏览器,重新登录,但没有帮助 - 回购大小保持在973MB.
今天早上(上述更改后三天),我对两个现有文件进行了一些小的补充,这些文件将文件大小增加了不到1KB,添加并提交给我的本地仓库,然后将更改推送到到位桶.几分钟后,我看了一下repb的Bitbucket页面,看到一条红色警告标语告诉我"这个repo超过了2 GB的限制,并且处于只读模式." 设置页面现在说repo的大小为2.3 GB.
根据Bitbucket的说法,在两个文件中添加几百个字节肯定是过去三天在远程仓库上发生的唯一活动.这种推动可能不是回购的原因,而是规模增加了一倍,但这两个事件在时间上密切相关.
git reflog show 没有回报.
将新副本克隆到备用目录,然后运行git count-objects给我一个881.29 MiB的大小包. …
我尝试将 GitHub 存储库导入到 Azure DevOps,但不断收到此错误:
Import request cannot be processed due to one of the following reasons:
Clone URL is incorrect.
Clone URL requires authorization.
Run Code Online (Sandbox Code Playgroud)
我对克隆 URL 和身份验证参数进行了两次和三次检查。无论我在字段中输入什么,它总是显示这两个错误。我该如何解决这个问题?
我无法理解如何在IntelliJ IDEA的"Indexed Maven Repositories"列表中获取存储库.
在我的一个项目中,我在此列表中有两个存储库:一个本地和一个(主)远程(参见下面的附件截图).在其他项目中(使用AppFuse模板创建)我在列表中只有一个(本地)仓库.
我试图在pom.xml文件和settings.xml文件中添加repos,但是repos没有出现在这个"魔术"列表中.
这意味着:
IntelliJ IDEA版本:11.0
Maven版本:2.2.1

如何在visual studio之外下载NuGet包?所以它可以用来创建离线包.
我使用的是 macOS 版本 11.2.2 BigSur。我似乎无法在网络上创建 GitHub 存储库(我使用的是 safari)。该按钮呈灰色或您说它已禁用。命名、存储等方面没有其他问题。请给我一些解决方案。
我目前正在使用DDD工作很多,并且在从其他聚合根加载/操作聚合根时遇到问题.
对于我模型中的每个聚合根,我也有一个存储库.存储库负责处理根的持久性操作.
假设我有两个聚合根,包含一些成员(实体和值对象).
AggregateRoot1和AggregateRoot2.
AggregateRoot1有一个引用AggregateRoot2的实体成员.
此外,当我在AggregateRoot1中的实体与AggregateRoot2之间创建关联时,是应该通过实体还是通过AggregateRoot2的存储库来完成?
希望我的问题有道理.
[编辑]
当前的解决方案
在Twith2Sugars的帮助下,我提出了以下解决方案:
如问题中所述,聚合根可以具有引用其他根的子项.将root2分配给root1的其中一个成员时,root1的存储库将负责检测此更改,并将其委派给root2的存储库.
public void SomeMethod()
{
AggregateRoot1 root1 = AggregateRoot1Repository.GetById("someIdentification");
root1.EntityMember1.AggregateRoot2 = new AggregateRoot2();
AggregateRoot1Repository.Update(root1);
}
public class AggregateRoot1Repository
{
public static void Update(AggregateRoot1 root1)
{
//Implement some mechanism to detect changes to referenced roots
AggregateRoot2Repository.HandleReference(root1.EntityMember1, root1.EntityMember1.AggregateRoot2)
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个简单的例子,没有Demeter法或其他最佳原则/实践包括:-)
进一步评论赞赏.
domain-driven-design aggregate loading repository aggregateroot
我想只查看已修改,添加等文件的列表,而不是内容(svn diff输出),只有文件列表svn status.
svn diff -r HEAD 抛弃了大量的信息,很难快速理解.
svn status 仅显示将工作副本与其本地原始版本(而不是存储库版本)进行比较的更改.
svn update 不支持 --dry-run
简而言之,我需要类似的东西svn status,但是将当前工作副本与存储库修订版进行比较(我将与HEAD修订版进行比较).
我查看了SVN手册,但遗憾的是没有任何帮助: - /
我先使用EF代码.此外,我正在为我的所有存储库使用基本存储库,并IUnitofWork注入存储库:
public interface IUnitOfWork : IDisposable
{
IDbSet<TEntity> Set<TEntity>() where TEntity : class;
int SaveChanges();
}
public class BaseRepository<T> where T : class
{
protected readonly DbContext _dbContext;
protected readonly IDbSet<T> _dbSet;
public BaseRepository(IUnitOfWork uow)
{
_dbContext = (DbContext)uow;
_dbSet = uow.Set<T>();
}
//other methods
}
Run Code Online (Sandbox Code Playgroud)
例如,我OrderRepository是这样的:
class OrderRepository: BaseRepository<Order>
{
IUnitOfWork _uow;
IDbSet<Order> _order;
public OrderRepository(IUnitOfWork uow)
: base(uow)
{
_uow = uow;
_order = _uow.Set<Order>();
}
//other methods
}
Run Code Online (Sandbox Code Playgroud)
我用这种方式使用它: …