Снова используйте Часть Репозитория мерзавца

У меня есть следующая установка проекта:

  • Solution A
    • Project 1 (легкий компонент)
    • Project 2 (содержит много файлов и зависит от Project 1)

Solution A единственный репозиторий мерзавца. Тогда я создал другое решение и нашел, что мог снова использовать и даже обновить функциональность Project 1. Таким образом, мое второе решение было бы, вероятно, похоже на это:

  • Solution B
    • Project 1 (должен быть совместно использован!)
    • Project 3 (зависит от Project 1).

Теперь я хочу Project 1 стать совместно используемым компонентом. Таким образом, каждый раз я изменяю исходный код Project 1 из любого решения (A или B), мне нужен другой для обновления соответственно.

Возможно, это имеет что-то, чтобы сделать функцию подмодуля мерзавца. Однако единственный способ, которым я смог использовать его, состоит в том, чтобы определить целое Solution A как подмодуль для Solution B. Это не действительно, из чего я хочу идеально из-за огромного размера Solution A. Мне только нужна крошечная часть его, чтобы быть подмодулем.

Я знаю, что это возможно в svn и работает точно, как я описал: Вы определяете каталог во внешнем репозитории в svn:externals свойство.

Какие-либо подсказки относительно этого? Или возможно, я пропускаю что-то?

10
задан Kerido 24 February 2010 в 13:29
поделиться

2 ответа

Единственной характеристикой Сущности является то, что она имеет долгоживущую и (полупостоянную) постоянную идентичность. Это можно инкапсулировать и выразить, внедрив IEquatable < T > . Вот один способ сделать это:

public abstract class Entity<TId> : IEquatable<Entity<TId>>
{
    private readonly TId id;

    protected Entity(TId id)
    {
        if (object.Equals(id, default(TId)))
        {
            throw new ArgumentException("The ID cannot be the default value.", "id");
        }

        this.id = id;
    }

    public TId Id
    {
        get { return this.id; }
    }

    public override bool Equals(object obj)
    {
        var entity = obj as Entity<TId>;
        if (entity != null)
        {
            return this.Equals(entity);
        }
        return base.Equals(obj);
    }

    public override int GetHashCode()
    {
        return this.Id.GetHashCode();
    }

    #region IEquatable<Entity> Members

    public bool Equals(Entity<TId> other)
    {
        if (other == null)
        {
            return false;
        }
        return this.Id.Equals(other.Id);
    }

    #endregion
}
-121--3565849-

Хотя это не ответ на ваш главный вопрос, стоит отметить, что когда MVC генерирует имена, он превращает что-то вроде Тэги в Project_Tags, заменяя периоды подчеркиванием.

Причиной этого является то, что точка в идентификаторе элемента будет выглядеть как элемент Project с классом Тэгов к CSS. Ясно, что это плохо, поэтому перевод подчеркивает, чтобы держать поведение предсказуемым.

В первом примере

<%= Html.ListBoxFor(c => c.Project.Categories,
    new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>

в списке предпринимается попытка привязки к Model.Project.Categories для строго типизированной модели, которая была предоставлена странице (с помощью лямбда-нотации). Я не уверен, что делает второй параметр в ListAxFor.

Какова модель, которая передается на страницу?

-121--1362042-

Это определенно связано с подмодулями (см. характер подмодулей )

В вашем случае идеальным решением было бы извлечение Project1 из SolityA Git repo:
См. Как извлечь подкаталоги git и сделать из них подмодуль? .

Но это включает в себя переписывание истории SolityA, что является проблемой, если вы уже опубликовали ее и если некоторые люди тянут из нее.

Использование filter-branch для процесса извлечения.

Чтобы переписать репозиторий так, как будто Project1/ был корнем проекта, и удалить всю остальную историю:

git filter-branch --subdirectory-filter Project1 -- --all

Таким образом, можно, например, превратить вложенный каталог библиотеки в собственный репозиторий. Обратите внимание на параметры -- , которые отделяют опции filter-branch от опций редакции, и -all для перезаписи всех ветвей и тэгов.

Затем объявите Project1 как подмодуль в SolityB :

cd SolutionB
git submodule add /path/to/Project1 Project1

ПРИМЕЧАНИЕ: Не используйте локальные URL-адреса здесь, если вы планируете опубликовать SolityB !

git commit -m "Add submodules Project1"
7
ответ дан 4 December 2019 в 02:50
поделиться

Можно использовать RegEx.Split для разделения непосредственно с помощью Enviroment.NewLine.

public static List<string> ConvertBlockToLines(this string block)
{
   return Regex.Split(block, Environment.NewLine).ToList();
}
-121--3054670-

Нет необходимости преобразовывать в ваш специальный знак:

List<string> strings = str.Split(new string[] {Environment.NewLine}, StringSplitOptions.None).ToList();
strings.ForEach(s => s = s.Trim());
-121--3054667-

Разбить проект 1 на собственный репозиторий и сделать его подмодулем как решения A, так и решения B.

0
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: