Как я упомянул выше , мне пришлось использовать обратное решение (удаление всех коммитов, не касаясь моего dir/subdir/targetdir
), которое, казалось, работало довольно хорошо, удаляя около 95% коммитов (по желанию). Однако остаются две небольшие проблемы.
ПЕРВЫЙ , filter-branch
проделал большую работу по удалению коммитов, которые вводят или модифицируют код, но, очевидно, коммитов слияния находятся ниже его места в Gitiverse.
Это косметическая проблема, с которой я, вероятно, могу жить ( он говорит ... отступая медленно с отведенными глазами) .
ВТОРОЕ несколько оставшихся коммитов в значительной степени ВСЕ дублированы! Кажется, я приобрел второй, избыточный график, который охватывает почти всю историю проекта. Интересная вещь (которую вы можете увидеть из рисунка ниже) заключается в том, что мои три локальные ветви не все находятся на одной временной шкале (что, разумеется, почему оно существует, а не просто сбор мусора).
Единственное, что я могу себе представить, это то, что один из удаленных Коммиты, возможно, были единственным коммитом слияния, который filter-branch
фактически удалил , и который создал параллельную временную шкалу, поскольку каждая теперь не слитая цепь получила свою собственную копию коммитов. ( пожимает плечами Где мои ТАРДИ?) Я почти уверен, что смогу решить эту проблему, хотя я очень очень хотел бы понять, как это произошло.
В случае сумасшедшего mergefest-O-RAMA я, скорее всего, оставлю его в покое, так как он так прочно укоренился в моей истории коммитов - угрожая мне, когда я подхожу, - кажется, это не так. на самом деле вызывает какие-то не косметические проблемы и потому что это довольно симпатично в Tower.app.
Это должно работать:
SHOW CREATE TABLE tbl_name
У вас должны быть привилегии SELECT для таблицы.
Связанные элементы перемещаются в «жесткую» область
Конечно, упорядоченным образом (с использованием таблицы)
Этот подход имеет большую эффективность, поскольку ему не нужно заставлять пользователя нажимать «поиск» или «добавить другое», что отвлекает их от того, что они делают, говорят, что он прерывает ход его мыслей.
Кроме того, если вы заставляете пользователя хватать мышь, чтобы щелкнуть что-нибудь во время набора текста, пользовательский интерфейс будет менее эффективным (я думаю, что об этом есть что-то, называемое законом Хика , но, откровенно говоря, я могу ошибаться)
Как видите, этот подход уже в значительной степени то, что вы имеете в виду,
A search feature that filters records in real time as you type would probably be a good idea to include. Another would be the possibility to sort the records.
Since there may be a lot of records, the best choice in this case is probably to have a separate area which displays what you have already chosen, so that the user won't have to scroll around the selection areas to find what they already have.
Я бы посоветовал не нажимать добавить еще , чтобы иметь возможность искать. Предупреждение справа - это хорошо, но, IMHO, оно должно только сказать, что поиск отображает результаты по типу пользователя.
Сортировка столбца (возможно, вместе с поиском) также была бы хорошей функцией. Я предлагаю сделать это, щелкнув заголовок таблицы с некоторым значком, показывающим, идет ли сортировка по возрастанию или по убыванию.
I ' d предлагает также выполнить поиск приблизительного сопоставления строк в случае, если результатов нет или мало. Так раздражает невозможность найти то, что вы точно не помните.
Наконец, для проверки первого впечатления (но не самой функциональности) я предлагаю загрузить его в 5-секундный тест и посмотрите, что у вас получится.
интуитивно понятный графический интерфейс http://img25.imageshack.us/img25/8568/28666917.png
Ссылка на исходное изображение
Другое дело, что на мой взгляд, ваша проблема заключается не в выборе нескольких записей, а в фильтрации этих десятков тысяч записей. Связь M-> M может быть реализована различными способами, но сложная часть состоит в том, чтобы обеспечить удобный и логичный способ просмотра / поиска огромного количества данных.
Это интересная и довольно распространенная проблема пользовательского интерфейса, как эффективно выбирать элементы. Я предполагаю, что вы хотите, чтобы пользователь сначала выбрал один элемент, и что вас интересует механизм выбора других элементов, связанных с этим первым элементом.
Существуют различные методы выбора. С точки зрения удобства использования было бы предпочтительно использовать только ОДИН метод для каждого сценария. Затем, когда пользователь увидит это, он будет знать, что делать.
различные методы выбора:
Вы сказали, что у вас будут тысячи возможных вариантов, так что исключаются 1 и 5. На самом деле тысячи будут исключать все из них, так как удобство использования не очень хорошо масштабируется, если в списке больше нескольких сотен.
Если вы можете рассчитывать на то, что пользователь отфильтрует список, как в вашем примере, то 6 может подойти. Если вы подумаете о том, как работает тегирование изображений в Facebook, я думаю, что это довольно эффективно для длинных списков: background: Добавление тегов к изображениям в Facebook - это механизм, который позволяет вам назначать одного или нескольких людей на части изображения, т. Е. «Помечать» их.
Когда вы выбираете изображение для пометки (т.е. «отдельный элемент») и хотите связать других предметы (люди) к нему, появится диалоговое окно. Он содержит около 6 лучших имен, которые вы использовали в прошлом, и текстовое поле, в котором вы можете начать вводить имя человека, которое хотите использовать. По мере ввода список динамически изменяется, чтобы сократить количество людей до тех, которые содержат введенную вами последовательность букв. Это очень хорошо работает для больших списков, но для фильтрации требуется ввод текста пользователем. Он также будет полагаться на использование сценариев для разумного сокращения списка на основе ввода пользователя.
Для вашего приложения он будет полагаться на то, что пользователь выполняет этот шаг один раз для каждой ассоциации, поскольку I ' м предполагая, что не все предметы будут иметь похожие имена!
Вот изображение приложения для тегов Facebook: http://screencast.com/t/9MPlpJQJzBQ
Я думаю, что то, что вы смоделировали, - довольно хороший способ сделать это. Когда вы думаете об отношении тегов к сообщениям в блоге (или даже в SO), то это много ко многим, и обычно это реализуется очень похоже: для одного сообщения вы ищете (или, поскольку они просты строк, введите напрямую) столько тегов, сколько хотите связать с ним. Я не могу вспомнить какие-либо отношения «многие ко многим», с которыми я часто сталкиваюсь, хотя я знаю, что их, вероятно, много ...
Необходимо рассмотреть ряд важных вопросов - сколько записей обычно будет использоваться (в отличие от доступным для ассоциации)? Будет ли большое количество записей на одной стороне ассоциации (при переключении с 1 на> M это кажется вероятным)?
Если одно из количеств записей обычно очень мало (<10, я бы скажем), назовите это LHS (потому что это обычно так), тогда лучший способ связать может быть разрешить поиск элементов LHS и RHS, а затем перетащить их в список - элементы LHS в собственно список; Элементы RHS в существующие элементы LHS. Таким образом, будет интуитивно понятно указать отношение между элементами. Вы также можете добавить другие параметры, например «связать со всеми», или группирующее перо, чтобы вы могли назначить несколько записей нескольким другим записям - нет ничего утомительного, как необходимость выполнить 15 перетаскиваний одной и той же записи.
На самом деле, я думаю, что это самая важная часть любого M- > Дизайн пользовательского интерфейса M - минимизируйте повторение. Проделывать то же самое с сотнями записей (помните, что если «никто никогда не ...», они это сделают), это не повод для беспокойства, особенно если это сложно. Я знаю, что это противоречит моему предыдущему совету, но я не думаю, что это так - проектируйте для типичного случая использования, но убедитесь, что нетипичные варианты не сделают программу непригодной для использования.
Проделывать то же самое с сотнями записей (помните, что если «никто никогда не ...», они это сделают), это не повод для беспокойства, особенно если это сложно. Я знаю, что это противоречит моему предыдущему совету, но я не думаю, что это так - проектируйте для типичного случая использования, но убедитесь, что нетипичные варианты не сделают программу непригодной для использования. Проделывать то же самое с сотнями записей (помните, что если «никто никогда не ...», они это сделают), это не повод для беспокойства, особенно если это сложно. Я знаю, что это противоречит моему предыдущему совету, но я не думаю, что это так - проектируйте для типичного случая использования, но убедитесь, что нетипичные варианты не сделают программу непригодной для использования.