Команда Git, чтобы показать, какие конкретные файлы игнорируются .gitignore

Это зависит от того, что делают эти потоки. Хотя передача данных между потоками относительно прямо вперед, пробуждение потоков для обработки данных может быть более сложным. Когда вы разрабатываете связь с парадигмой потока / соединения, ваш поток почти все время застревает в методе Read, например Socket.Receive . Хотя в этом состоянии другие потоки не могут действительно разбудить этот поток, чтобы он отправил данные, которые они хотят отправить. Одно из решений заключается в том, чтобы каждый раз получать время приема и проверять, есть ли у него данные для передачи, но это просто отстой.

Еще одна идея состоит в том, чтобы иметь 2 потока на один сокет, один для отправки одному для приема. Но тогда все преимущества наличия потока в одном соке исчезли: вы больше не можете иметь простое управление состоянием «сессии» в коде потока, у вас есть состояние, разделенное между двумя потоками, и это просто беспорядок.

Вместо этого вы можете вместо этого использовать async Receive: поток сокета помещает BeginReceive , а затем ждет события. Событие сигнализируется либо завершением приема , либо в очереди отправки, которая имеет что-то «отброшенное» (или вы можете ждать по нескольким событиям, в том числе и в основном). Теперь это сработает, но в данный момент у вас есть полупородная часть части aync part one-thread -per-socket. Если вы пойдете по этому пути, я бы прошел целых 9 ярдов: сделайте сервер полностью асинхронным.

Лучшим решением будет переход на асинхронный режим. Вместо обмена данными между потоками процедуры завершения работают с заблокированными данными. Connection1 BeginReceive завершается, когда он получает данные, вы анализируете полученные данные и анализируете контент, а затем решаете отправить его на Connection2. Таким образом, вы вызываете BeginSend на сокет Connection2, то есть поток , который получил данные, также отправляет данные . Это намного эффективнее, чем модель нити за сокет, но большой недостаток - это просто сложно, если вы знакомы с асинхронным и многопоточным программированием.

См. Пример гнезда асинхронного сервера и Пример асинхронного клиентского гнезда для праймера.

557
задан Charles Duffy 5 January 2019 в 20:32
поделиться

3 ответа

Примечания:

<час>

Также интересный (упомянутый в [1 127] ответ qwertymk ), можно также использовать git check-ignore -v команда, по крайней мере, на Unix ( не работает на сессии CMD Windows )

git check-ignore *
git check-ignore -v *

, второй отображает фактическое правило .gitignore, который делает файл, который будет проигнорирован в мерзавце repo.
На Unix, с помощью" , Что расширяется до всех файлов в текущем каталоге рекурсивно? " и bash4 +:

git check-ignore **/*

(или find -exec команда)

<час>

Исходный ответ 42009)

git ls-files -i

должен работать, кроме [1 131], его исходный код указывает:

if (show_ignored && !exc_given) {
                fprintf(stderr, "%s: --ignored needs some exclude pattern\n",
                        argv[0]);

exc_given?

оказывается, что этому нужен еще один параметр после -i для фактического списка чего-либо:

Попытка:

git ls-files -i --exclude-from=[Path_To_Your_Global].gitignore

(но это только перечислило бы Ваш , кэшировался (непроигнорированный) объект, с фильтром, так, чтобы был не совсем, что Вы хотите)

<час>

Пример:

$ cat .git/ignore
# ignore objects and archives, anywhere in the tree.
*.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git ls-files --ignored \
    --exclude='Documentation/*.[0-9]' \
    --exclude-from=.git/ignore \
    --exclude-per-directory=.gitignore
<час>

На самом деле, в моем 'gitignore' файле (названный 'исключают'), я нахожу командную строку, которая могла помочь Вам:

F:\prog\git\test\.git\info>type exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Так....

git ls-files --others --ignored --exclude-from=.git/info/exclude
git ls-files -o -i --exclude-from=.git/info/exclude

git ls-files --others --ignored --exclude-standard
git ls-files -o -i --exclude-standard

должен добиться цели.

, Как упомянуто в эти страница справочника , --others ls-файлов является важной частью, чтобы показать, что Вы не кэшировались, не фиксировавший, обычно проигнорированные файлы.

--exclude_standard не просто ярлык, но и способ включать весь , стандарт "проигнорировал шаблоны" настройки.

exclude-standard
Добавляют стандартные исключения мерзавца: .git/info/exclude, .gitignore в каждом каталоге, и user's global exclusion file.

560
ответ дан GoTo 5 January 2019 в 20:32
поделиться
  • 1
    Огромное спасибо @andr, это работает как очарование. Вы были правы относительно процесса создания макета, это была проблема. – mangotasche 22 January 2013 в 00:39

Хотя в целом правильное решение не работает во всех обстоятельствах. Предположим, что каталог репозитория такой:

# ls **/*                                                                                                       
doc/index.html  README.txt  tmp/dir0/file0  tmp/file1  tmp/file2

doc:
index.html

tmp:
dir0  file1  file2

tmp/dir0:
file0

и .gitignore, например:

# cat .gitignore
doc
tmp/*

Это игнорирует каталог doc и все файлы ниже tmp . Git работает должным образом, но данная команда для вывода списка игнорируемых файлов - нет. Давайте посмотрим, что сообщает git:

# git ls-files --others --ignored --exclude-standard                                                            
tmp/file1
tmp/file2

Обратите внимание, что doc отсутствует в списке. Вы можете получить это с помощью:

# git ls-files --others --ignored --exclude-standard --directory                                                
doc/

Обратите внимание на дополнительную опцию - directory .

Насколько мне известно, не существует одной команды для вывода списка всех игнорируемых файлов сразу. Но я не знаю, почему tmp / dir0 вообще не отображается.

39
ответ дан 22 November 2019 в 22:02
поделиться

Главной проблемой является перестановка функция. Когда он называется неявно всегда возвращает только одно значение.

Пролог - это язык, который всегда пытается доказать истинность утверждения, выводя его с помощью приведенных аксиом (фактов или правил).

пермь не является функцией в смысле процедурного программирования. perm - предикат, о котором рассказываем пролог двух вещей:

  1. Пустой список - перестановка самого себя.
  2. Список является перестановкой [H 'Perm] при наличии списка Rest таким образом, что Rest получается удалением H из List , а Rest является перестановкой Perm .

При запросе, является ли какой-либо список перестановкой другого, prolog попытается применить эти шаги деривации (рекурсивно), чтобы доказать это. Если эта рекурсия заходит в тупик, т.е. оператор, который не может быть доказан, так как к нему не могут быть применены никакие правила, он возвращается назад.

-121--3572409-

Нет простого решения, необходимо подкласс NSTextField , чтобы сделать то, что вы хотите. Вам нужно будет научиться работать с подклассированием, если вы хотите сделать что-нибудь полезное в какао.

Текстовые поля могут быть относительно сложными для подкласса, поскольку NSTextField использует отдельный объект NSTextView , называемый редактором полей, для обработки фактического редактирования. Это текстовое представление возвращается объектом NSWindow для NSTextField и повторно используется для всех текстовых полей на странице.

Как и любой подкласс NSResponder , NSTextField отвечает на методы -acceptsFirstResponder и -becOmeFirstResponder . Они вызываются в том случае, если окно хочет сфокусировать внимание на конкретном элементе управления или представлении. Если вы вернете YES из обоих этих методов, то ваш элемент управления/вид будет иметь статус первого ответчика, что означает, что это активный элемент управления. Однако, как уже упоминалось, NSTextField фактически дает редактору поля статус первого ответчика при щелчке, поэтому необходимо сделать что-то подобное в подклассе NSTextField :

@implementation MCTextField
- (BOOL)becomeFirstResponder
{
    BOOL result = [super becomeFirstResponder];
    if(result)
        [self performSelector:@selector(selectText:) withObject:self afterDelay:0];
    return result;
}
@end

Это сначала вызывает реализацию суперкласса -becomeFirstResponder , который выполнит тяжелую работу по управлению редактором поля. Затем вызывается -selectText: , который выбирает весь текст в поле, но делает это после задержки в 0 секунд, которая будет задерживаться до следующего запуска через цикл событий. Это означает, что выбор будет выполнен после полной настройки редактора полей.

-121--2904390-

Еще один довольно чистый вариант (Не предполагается игра слов.):

git clean -ndX

Объяснение:

$ git help clean

git-clean - Remove untracked files from the working tree
-n, --dry-run - Don't actually remove anything, just show what would be done.
-d - Remove untracked directories in addition to untracked files.
-X - Remove only files ignored by Git.

Примечание: В этом решении не будут отображаться пропущенные файлы, которые уже были удалены.

397
ответ дан 22 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

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