Я использую Windows 10 с PowerShell 5 и обнаружил, что почти все «Unix-подобные» решения не работают для меня.
> mysql -u[username] [database-name] < my-database.sql
At line:1 char:31
+ mysql -u[username] [database-name] < my-database.sql
+ ~
The '<' operator is reserved for future use.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
Я заканчиваю тем, что использую эту команду:
> type my-database.sql | mysql -u[username] -h[localhost] -p [database-name]
И она работает отлично, и, надеюсь, это поможет.
Благодаря @ Francesco Casula ответ , BTW.
$ cd repository-where-i-want-to merge
$ hg pull branch-i-want-to-merge
$ hg merge # if necessary
$ hg branch my-branch
или
$ hg clone original-repository my-branch
Хотя следует отметить, что branch создает «виртуальный» каталог (т. Е. Файлы остаются такими же, но hg обрабатывает их, как если бы они были другими внутри системы), а clone создает реальную полную копию. Строго говоря, клон не ветвится.
Игнорирование настраивается в обычном текстовом файле с именем .hgignore в корне вашего репозитория. Добавьте его, как обычный файл, с помощью:
hg add .hgignore
Для сопоставления файлов доступны две опции синтаксиса: glob и regexp. glob - это unix-подобное расширение имени файла, а regexp - это регулярные выражения. Вы активируете каждый, добавляя синтаксис: glob
или синтаксис: regexp
в отдельной строке. Все следующие строки будут использовать этот синтаксис до следующего маркера синтаксиса. Вы можете иметь столько маркеров синтаксиса, сколько хотите. Синтаксис по умолчанию - regexp, поэтому, если вы используете только regexp, вам не нужен маркер синтаксиса.
Вы можете добавлять комментарии с помощью #
Пример:
# python temporary files
syntax: glob
*.pyc
#editor autosaves
*~
# temporary data
syntax: regexp
temp
Игнорировать применяется только к неуправляемым файлам (т. Е. К файлам, которые еще не зарегистрированы).
$ hg init my-repository
$ hg tag my-tag
Вы также можете клонируйте свой репозиторий, чтобы создать специальный тег репозиторий.
$ hg clone working-repository my-tag-repository
Пожалуйста, отредактируйте аккуратно, если вы устанавливали из исходного кода в Linux или использовали установщики Windows.
Используйте easy_install Python (с Setuptools ):
sudo easy_install mercurial
Это находит последнюю версию (1.3.1 на момент написания) и устанавливается по адресу:
/Library/Frameworks/Python.framework/Versions/2.6/bin/
С Python 2.6 это также позволяет обойти Пакет установщика Mercurial OS X (версия 1.2.1 от 26 июля 2009 г.) жалуется, что ему нужен Python 2.5. Из документации видно, что Fink и Macports устанавливают версию 1.2.
Большинство явных пакетов Linux отстают от текущей версии, поэтому используйте easy_install (как указано выше) или загрузите архив Mercurial , распакуйте архив, перейдите в каталог mercurial и запустите:
$ make
$ sudo make install # do a system-wide install
$ hg debuginstall # sanity check
$ hg # see help
(из Введение в Mercurial, распределенную систему контроля версий )
Имеется бинарный пакет последней версии Mercurial . TortoiseHg - это расширение оболочки Windows для Mercurial и устанавливает его. Cygwin также может установить Mercurial.
В качестве альтернативы (инструкции слишком длинные, поэтому ссылки здесь), вы можете построить оптимизированную или чистую версию Mercurial на Python из исходников .
Только хранимые процедуры напрямую предотвращают внедрение SQL, если вы вызываете их параметризованным способом. Если в вашем приложении все еще есть строка с именем процедуры и объединением параметров из пользовательского ввода в эту строку в вашем коде, у вас все равно будут проблемы.
Однако при использовании исключительно хранимые процедуры позволяют добавить дополнительную защиту, позволяя отключать разрешения для всего, кроме команды EXEC. Помимо этого, параметризованные запросы / подготовленные операторы обычно кэшируются сервером и поэтому почти во всех отношениях похожи на хранимую процедуру.
Несмотря на это, хранимые процедуры имеют два больших преимущества для крупных предприятий:
Чтобы увидеть список файлов, которые были изменены:
$ hg status
Будет напечатан каждый файл, который был изменен вместе с его статусом, который может включать:
M
- Изменено. Файл был изменен, но изменения не зафиксированы. A
- Добавлен. Раньше файл не отслеживался, но если вы зафиксируете его, Mercurial начнет отслеживать его. R
- Удалено. Файл отслеживался раньше, но если вы сделаете коммит, Mercurial перестанет отслеживать его в этом и будущих коммитах. ?
- Неизвестно. Файл в настоящее время не отслеживается Mercurial. Фиксация не повлияет на него, если вы не используете hg add
, чтобы добавить его. !
- Отсутствует. Файл отслежен, но Mercurial не может найти его в рабочей копии. Чтобы увидеть изменения, которые на самом деле были внесены в файлы:
$ hg diff
Mercurial запоминает, откуда был клонирован репозиторий (в .hg / hgrc), поэтому вы можете просто запустить:
hg pull
, чтобы получить последний код из исходного репозитория. (Это не обновляет рабочий каталог.)
hg update
для обновления рабочего каталога.
hg pull -u
для одновременного выполнения извлечения и обновления.
Есть три способа:
Расширение преобразования клонирует существующий репозиторий Subversion в репозиторий Mercurial. Он поставляется с Mercurial. Это работает примерно так:
hg convert <Subversion URL or directory> <path to new Mercurial repository>
Например, это захватит ствол репозитория SixApart memcached.
hg convert http://code.sixapart.com/svn/memcached/trunk
Расширение может постепенно вводить новые ревизии из репозитория Subversion в Mercurial (что-то вроде pull). Однако он не поддерживает получение ревизий Mercurial и отправку их обратно в Subversion (без отправки). [XXX: Исправьте это, если это неверно] .
Расширение hgsubversion . Во многих отношениях это наиболее сложное решение, так как оно использует Subversion API для связи с репозиторием Subversion. Его цель - стать мостом hg-svn. Он позволяет выполнять полный цикл изменений (полное клонирование, извлечение и отправка). Однако на момент написания [XXX: исправьте это, если / когда оно станет некорректным] , оно все еще находится в разработке, и его нет пока официальных релизов. Как следствие, он работает только с самой последней версией Mercurial (1.3 на момент написания).
тегов /
, чтобы отличать их от одноименных ветвей). closed-branch
для закрытия ветвей, которые удаляются в Subversion. hg svn
, хотя он нацелен на интеграцию до такой степени, что вы этого не сделаете. ему не нужна часть 'svn' (т.е. он хочет обрабатывать клон Subversion как можно больше, как любой другой репозиторий Mercurial).; Он работает следующим образом:
clone:
hg svnclone <Subversion URL>
OR (только для ] svn: //
URL-адреса)
hg clone <svn:// URL>
pull:
hg svn pull
push:
hg svn push
incoming:
hg svn incoming
outgoing:
hg svn outgoing
Проверка всего репозитория:
hg svnclone http://code.sixapart.com/svn/memcached
hgsvn утилита ( дерево битовых пакетов ). До недавнего времени это позволяло только клонировать и извлекать репозиторий Subversion, но начиная с hgsvn 0.1.7
он поддерживает push. [Не знаю, насколько хорошо толкает. Любой, у кого больше опыта, должен обновить это.] Он имеет следующие примечательные особенности:
branch / some-feature
будет иметь вид hg branch some-feature
. Он помещает ствол в ствол
(т.е. ничего нет в ветке Mercurial по умолчанию, если пользователь явно не переключается на нее.) Это работает следующим образом:
clone:
hgimportsvn <Subversion URL>
pull:
hgpullsvn
push:
hgpushsvn
incoming:
hgpullsvn -n
исходящие:
hgpushsvn -n
Извлечение всего репозитория:
hgimportsvn http://code.sixapart.com/svn/memcached
Извлечение только ствола:
hgimportsvn http://code.sixapart.com/svn/memcached/trunk
$ hg commit -m "Commit message"
hg clone [OPTION]... SOURCE [DEST]
Где может быть опция:
-U --noupdate the clone will only contain a repository (no working copy)
-r --rev a changeset you would like to have after cloning
--pull use pull protocol to copy metadata
--uncompressed use uncompressed transfer (fast over LAN)
-e --ssh specify ssh command to use
--remotecmd specify hg command to run on the remote side
Где источник - это источник исходных файлов, находящихся в репозитории, где он может быть удаленным URL или каталог файловой системы. Например:
А место назначения - это место, где исходный код будет расположен в вашей локальной файловой системе.
Оба используют hg diff
. Когда используется hg diff
, отображаются все изменения в рабочей копии и подсказка (последняя фиксация).
Для «Как сравнить две версии файла?»
$ hg diff -r{rev1} -r{rev2} {file.code}
Приведенная выше команда покажет различие между rev1 и rev2 "file.code".
Для "Как вы сравниваете текущий файл и предыдущую ревизию?"
$ hg diff {file.code}
Вышеупомянутая команда покажет разницу между текущей версией "file.code" "и последняя ревизия (последняя внесенная).
: D
Mercurial хранит свою информацию о конфигурации в ~ / .hgrc
в системах * nix и в % UserProfile% \ mercurial. ini
в системах Windows. (% UserProfile%
обычно "C: \ Documents and Settings \ [имя пользователя] \"
в системах Windows 2000 или Windows XP и обычно C: \ Users \ [ имя пользователя] \
в системах Windows Vista и Windows 7.)
В качестве отправной точки вы должны установить свое имя пользователя Mercurial, поместив следующее в свой .hgrc
или mercurial.ini
:
# This is a Mercurial configuration file.
[ui]
username = Firstname Lastname <email.address@example.net>
Пользователи TortoiseHg в системах Windows могут альтернативно запустить hgtk userconfig
См. Также « Создание файла конфигурации Mercurial » в главе 2 в « Ртутный:
Вызов этой команды из текущего локального репозитория * mercurial
hg commit [OPTION]... [FILE]...
псевдонимы: ci
Где параметр может быть:
-A --addremove mark new/missing files as added/removed before committing
--close-branch mark a branch as closed, hiding it from the branch list
-I --include include names matching the given patterns
-X --exclude exclude names matching the given patterns
-m --message use <text> as commit message
-l --logfile read commit message from <file>
-d --date record datecode as commit date
-u --user record user as committer
пример команды:
hg commit -m "added readme" README
ПРИМЕЧАНИЯ :
Используйте hg outgoing
, чтобы получить список наборов изменений, которые будут установлены по умолчанию репозиторий:
$ hg outgoing
Чтобы получить фактические изменения кода, используйте -p
( - patch
). Это выведет все изменения полностью:
$ hg outgoing -p
Чтобы показать историю ревизий всего репозитория или файлов
$ hg log {file(s)}
или
$ hg history {file(s)}
И для см. список в обратном порядке
$ hg log -r:
Чтобы удалить файл из репозитория и удалить его в следующая фиксация:
$ hg remove {file(s)}
Чтобы удалить файл из репозитория, но не удалять его
$ hg remove -Af {file(s)}
или из Mercurial 1.3
$ hg forget {file(s)}
Доступно несколько опций
$ hg backout -m 'back out second change' tip
reverting myfile
changeset 2:01adc4672142 backs out changeset 1:7e341ee3be7a
$ cat myfile
first change
Шаг 1 : Создайте файл исправления, чтобы вернуть изменения, произошедшие между ревизиями 107 и 108:
hg diff -r107 -r108 --reverse > revert-change.patch
(альтернативно, hg diff -r108 -r107 без --reverse сделает то же самое)
Шаг 2 : Примените файл исправления :
patch -p1 < revert-change.patch
Некоторые различия могут не применяться, например:
Hunk #3 FAILED at 517.
1 out of 3 hunks FAILED -- saving rejects to file 'foo/bar.c.rej'
Файл .rej будет содержать содержимое разностей, которые не удалось применить, вам нужно посмотреть.