Краткий ответ: ваш метод foo()
возвращается немедленно, а вызов $ajax()
выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.
В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo()
и сохранить результаты в члене этого объекта после завершения асинхронного вызова.
function foo(result) {
$.ajax({
url: '...',
success: function(response) {
result.response = response; // Store the async result
}
});
}
var result = { response: null }; // Object to hold the async result
foo(result); // Returns before the async completes
Обратите внимание, что вызов foo()
] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response
.
(Этот ответ обновлен в соответствии с поведением SVN 1.8 и 1.9)
У вас есть 2 вопроса:
Под «проигнорированным файлом» я подразумеваю, что файл не будет отображаться в списках даже как «неверсифицированный»: ваш SVN-клиент будет притворяться, что файл вообще не существует в файловой системе.
Игнорируемые файлы указаны в «шаблон файла». Синтаксис и формат шаблонов файлов объясняются в онлайн-документации SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Файл Шаблоны в Subversion ".
Subversion, начиная с версии 1.8 (июнь 2013 г.) и более поздних версий, поддерживает 3 разных способа указания шаблонов файлов. Ниже приведено резюме с примерами:
global-ignores
: global-ignores
выиграл C:\Users\{you}\AppData\Roaming\Subversion\config
Windows (на основе файлов) на основе реестра) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
как в HKLM
, так и HKCU
. Linux / Unix - ~/.subversion/config
svn:ignore
, которое установлено в каталогах (а не в файлах): .gitignore
. svn:ignore
применяется к каталогам и нерекурсивна или унаследована. Любой файл или немедленный подкаталог родительского каталога, который соответствует шаблону файла, будет исключен. svn:ignore
игнорируется в каталогах, не связанных с непосредственным потомком: cd ~/myRepoRoot # Open an existing repo.
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt".
svn status # Check to see if the file is ignored or not.
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored.
svn propset svn:ignore "ignoreThis.txt" . # Apply the svn:ignore property to the "myRepoRoot" directory.
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory.
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt".
svn status
> ? ./subdirectory/ignoreThis.txt # ...and is is NOT ignored!
> 1 unversioned file
(Таким образом, файл ./subdirectory/ignoreThis
не игнорируется, хотя «ignoreThis.txt
» применяется к корню репо .
. svn propset svn:ignore <filePattern> . --recursive
. Это создаст копию свойства в каждом подкаталоге. Если в дочернем каталоге значение <filePattern>
отличается от другого, значение ребенка полностью переопределяет родителей, поэтому эффекта аддитивности нет. Поэтому, если вы измените <filePattern>
на корне .
, вы должны изменить его с помощью --recursive
, чтобы перезаписать его в дочерних и потоковых каталогах. svn ignore pathToFileToIgnore.txt
, однако это не так, как работает функция игнорирования SVN. svn:global-ignores
. Требуется SVN 1.8 (июнь 2013 г.): svn:ignore
, за исключением того, что использует функцию «унаследованных свойств» SVN 1.8. svn:ignore
, шаблон файла автоматически применяется в каждом каталоге потомков (а не только непосредственно для детей). Это означает, что нет необходимости устанавливать svn:global-ignores
с флагом --recursive
, поскольку унаследованные шаблоны игнорируемых файлов автоматически применяются по мере их унаследования. svn:global-ignores
вместо: cd ~/myRepoRoot # Open an existing repo
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt"
svn status # Check to see if the file is ignored or not
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored
svn propset svn:global-ignores "ignoreThis.txt" .
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt"
svn status
> 0 unversioned files # the file is ignored here too!
Вся эта схема меня сбила с толку, потому что терминология TortoiseSVN (используемая в их системе меню Windows Explorer) изначально вводила меня в заблуждение - я не был уверен, что значение меню «Игнорировать» «Добавить рекурсивно», «Добавить *» и «Добавить " опции. Надеюсь, что в этом сообщении объясняется, как функция Игнорировать связана с функцией SVN Properties. Тем не менее, я предлагаю использовать командную строку для установки игнорируемых файлов, чтобы вы почувствовали, как это работает, вместо использования графического интерфейса, и только с помощью графического интерфейса для управления свойствами после удобного использования командной строки.
Команда svn status
скроет проигнорированные файлы (то есть файлы, соответствующие шаблону RGA global-ignores
, или сопоставив исходный родительский каталог svn:ignore
шаблон или соответствие любому шаблону svn:global-ignores
каталога ancesor.
Используйте опцию --no-ignore
, чтобы просмотреть перечисленные файлы. Игнорируемые файлы имеют статус I
, а затем выводят вывод на grep
только показывающие строки, начинающиеся с «I».
Команда:
svn status --no-ignore | grep "^I"
Например:
svn status
> ? foo # An unversioned file
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore
> ? foo # An unversioned file
> I ignoreThis.txt # A file matching an svn:ignore pattern
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore | grep "^I"
> I ignoreThis.txt # A file matching an svn:ignore pattern
ta-da!
Используйте команду svn status на вашей рабочей копии, чтобы показать статус файлов, файлы, которые еще не находятся под управлением версией (и не игнорируются), будут иметь вопросительный знак рядом с ними.
Что касается игнорируя файлы, необходимые для редактирования свойства svn: ignore, прочитайте главу «Игнорирование неверсированных элементов в svnbook в ]. .html . В книге также описано больше об использовании статуса svn.
Кроме того, если вы используете Tortoise SVN, вы можете это сделать:
Используйте следующую команду для создания списка, не содержащего файлы управления версиями.
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
Затем отредактируйте файл, чтобы оставить только файлы, которые вы хотите фактически игнорировать. Затем используйте это, чтобы игнорировать файлы, перечисленные в файле:
svn propset svn:ignore -F ignoring.txt .
Обратите внимание на точку в конце строки. Он сообщает SVN, что свойство устанавливается в текущем каталоге.
Удалить файл:
rm ignoring.txt
Наконец, commit,
svn ci --message "ignoring some files"
Вы можете затем проверьте, какие файлы игнорируются с помощью:
svn proplist -v
Другое решение:
svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
или строка за строкой
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Что он делает:
При использовании propedit убедитесь, что у вас нет конечных пробелов, так как это приведет к тому, что файл будет исключен из списка игнорирования.
Они автоматически вставлены, если вы используете tab-autocomplete для linux для создания файл для начала:
svn propset svn:ignore 'file1
file2' .
Добавление каталога в subversion и игнорирование содержимого каталога
svn propset svn:ignore '\*.*' .
или
svn propset svn:ignore '*' .
svn status
сообщит вам, какие файлы не находятся в SVN, а также то, что было изменено.
Посмотрите на свойства SVN для свойства ignore.
Для всех вещей SVN требуется Красная книга .
Вы также можете установить глобальный шаблон игнорирования в файле конфигурации SVN.
Если вы используете TortoiseSVN , щелкните правой кнопкой мыши файл, а затем выберите TortoiseSVN / Добавить в список игнорирования. Это добавит файл / подстановочный знак в свойство svn:ignore
.
svn:ignore
будет проверяться при проверке файлов, и соответствующие файлы будут проигнорированы. У меня есть следующий список игнорирования для проекта Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Этот список можно найти в контекстном меню в TortoiseSVN / Properties.
SVN ignore
легко управляется в TortoiseSVN. Откройте TortoiseSVN и щелкните правой кнопкой мыши по файловому меню, затем выберите Добавить в список игнорирования.
Это добавит файлы в свойство svn:ignore
. Когда мы проверяем файлы, то файл, который сопоставляется с svn:ignore
, который будет проигнорирован и не будет зафиксирован.
В проекте Visual Studio мы добавили следующие файлы для игнорирования:
bin obj
*.exe
*.dll
*.pdb
*.suo
Мы успешно управляем исходным кодом SVN Comparetrap с помощью этого метода
Как никто, кажется, не упомянул об этом ...
svn propedit svn:ignore .
Затем отредактируйте содержимое файла, чтобы указать шаблоны для игнорирования, выйти из редактора, и все готово.