Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Я не ожидал бы, что захват файла когда-либо сделает его как функцию в мерзавце. Какие двоичные файлы Вы, прежде всего, интересуются? Вы на самом деле интересуются блокировкой файлов или просто предотвращением конфликтов, вызванных, не будучи способен объединять их.
я, кажется, помню кого-то, кого разговор (или даже реализация) поддерживает для слияния документов OpenOffice в мерзавце.
Я обсудил этот вопрос на дискуссионных группах мерзавца и пришел к заключению, что в это время, существует никакой согласовано метод централизованного захвата файла для мерзавца.
Стоит исследовать Ваш текущий рабочий процесс, чтобы видеть, если блокировка изображений действительно необходима. Для двух человек относительно необычно независимо отредактировать изображение, и немного коммуникации может иметь большое значение.
Когда я использовал Подрывную деятельность, я неукоснительно установил svn:needs-lock
свойство на всем двоичном файле и даже трудных к редактированию текстовых файлах. Я никогда на самом деле не испытывал конфликтов.
Теперь, в Мерзавце, я не волнуюсь о таких вещах. Помните: привязывается Подрывная деятельность не на самом деле обязательные блокировки, они - просто коммуникационные инструменты. И угадайте что: Мне не нужна Подрывная деятельность для передачи, я могу справиться очень хорошо с электронной почтой, Телефоном и IM.
Другая вещь, которую я сделал, должен заменить много двоичных форматов форматами обычного текста. Я использую reStructuredText или LaΤ Ε Χ вместо Word, CSV вместо Excel, ASCII-ТВОРЧЕСТВА вместо Visio, YAML вместо баз данных, SVG вместо OO Тянут, abc вместо MIDI, и так далее.
Мы только что недавно начали использовать Мерзавца (используемая Подрывная деятельность ранее), и я нашел изменение в рабочем процессе, который мог бы помочь с Вашей проблемой без потребности в блокировках. Это использует в своих интересах, как мерзавец разработан и как легкие ответвления.
В основном, это сводится к продвижению к неосновному ответвлению, выполнению обзора того ответвления и затем слияния в основное ответвление (или какой бы ни целевое ответвление).
способ, которым мерзавец "предназначается", чтобы использоваться, каждый разработчик, публикует их собственный общедоступный репозиторий, от которого они запрашивают других вытянуть. Я нашел, что пользователи Подрывной деятельности испытывают затруднения из-за этого. Так, вместо этого, мы продвигаем для ветвления деревьев в центральном репозитории с каждым пользователем, имеющим их собственный отросток дерева. Например, иерархия как это могла бы работать:
users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey
Не стесняются использовать Вашу собственную структуру. Обратите внимание, что я также показываю ответвления темы, другую общую идиому мерзавца.
Тогда в локальном repo для пользователя a:
feature1
feature2
И получить его к центральному серверу (источник):
git push origin feature1:users/a/feature1
(это может, вероятно, быть упрощено с изменениями конфигурации)
Так или иначе, как только feature1 рассматривается, кто бы ни ответственен (в нашем случае, это - разработчик функции, у Вас мог быть отдельный пользователь, ответственный за слияния ведущему устройству), делает следующее:
git checkout master
git pull
git merge users/name/feature1
git push
получение по запросу делает выборку (получение по запросу любых новых основных изменений и ответвление функции) и ведущее устройство обновлений к тому, что имеет центральный репозиторий. Если пользователь их задания и прослеженного ведущего устройства правильно, не должно быть никаких проблем со слиянием.
Все это означает, что, даже если пользователь или удаленная команда вносят изменение в двоичный ресурс, она рассматривается, прежде чем она будет включена в основное ответвление. И существует четкое формирование рисунка (на основе процесса) относительно того, когда что-то входит в основное ответвление.
можно также программно осуществить аспекты этого мерзавца использования рычаги, но снова, я еще не работал с ними, так не может говорить о них.
В ответ на дополнительное беспокойство Mario с изменениями, происходящими в нескольких местах на двоичных файлах. Таким образом, сценарием является Alice, и Bob оба вносят изменения в тот же двоичный ресурс одновременно. У каждого из них есть их собственный локальный repo, клонированный от одного центрального удаленного.
Это - действительно потенциальная проблема. Таким образом, Alice приходит первым и продвигает к центральному alice/update
ответвление. Обычно, когда это происходит, Alice сделала бы объявление, что это должно быть рассмотрено. Bob видит, что и рассматривает его. Он может или (1) включить те, изменяет себя в его версию (переходящий от alice/update
и вносящий его изменения в тот) или (2) опубликовать свои собственные изменения в bob/update
. Снова, он делает объявление.
Теперь, если нажатия Alice к master
вместо этого, у Bob есть дилемма, когда он вытягивает master
и пытается объединиться в свое локальное ответвление. Его конфликты с Alice. Но снова, та же процедура может применяться, только на различных ответвлениях. И даже если Bob игнорирует все предупреждения и фиксации по Alice, всегда возможно вытащить фиксацию Alice для фиксации вещей. Это становится просто проблемой связи.
Начиная с (AFAIK) блокировки Подрывной деятельности являются просто консультацией, электронное письмо или мгновенное сообщение могли служить той же цели. Но даже если Вы не делаете этого, Мерзавец позволяет Вам зафиксировать его.
нет, по сути нет никакого механизма блокировки. Но механизм блокировки имеет тенденцию просто быть заменой для хорошей коммуникации. Я полагаю вот почему, что разработчики Мерзавца не добавили механизм блокировки.
Я соглашаюсь, что блокировка двоичных файлов является необходимой функцией некоторых сред. У меня просто была мысль о том, как реализовать это, хотя:
git-lock
связалась бы с центральным сервером блокировки, работающим где-нибудь для выяснения у разрешения заблокировать. git-add
сообщил бы серверу блокировки хеша содержания заблокированного файла. Это - в значительной степени непродуманная идея и везде существуют потенциальные ямы. Это также идет вразрез с духом мерзавца, все же это может, конечно, быть полезно в некоторых контекстах.
В конкретной организации, этот вид вещи мог, возможно, быть создан с помощью подходящей комбинации оберток сценария и рычагов фиксации.
В Subversion есть блокировки, и они не только рекомендательные. Они могут быть принудительно применены с помощью атрибута svn: needs-lock
(но также могут быть намеренно нарушены при необходимости). Это правильное решение для управления файлами, не подлежащими слиянию. Компания, в которой я работаю, хранит практически все, что есть в Subversion, и использует svn: needs-lock
для всех файлов, не подлежащих слиянию.
Я не согласен с тем, что «блокировки - это всего лишь метод связи». Это гораздо более эффективный метод, чем push-уведомления, такие как телефон или электронная почта. Блокировки Subversion самодокументируются (у кого есть блокировка). С другой стороны, если вам нужно общаться с помощью других традиционных каналов push-уведомлений, таких как электронная почта, кому вы отправляете уведомление? Вы не знаете заранее, кто может захотеть отредактировать файл, особенно в проектах с открытым исходным кодом, если у вас нет полного списка всей вашей команды разработчиков. Таким образом, эти традиционные методы связи не так эффективны.
Сервер центрального замка, хотя и противоречит принципам DVCS, является единственным возможным методом для файлов, не подлежащих объединению. Пока DVCS не имеет функции центрального замка, я думаю, что она сохранит компанию, над которой я работаю, использующей Subversion.
Лучшим решением было бы создать инструмент слияния для всех ваших двоичных форматов файлов, но это дольше -срочная и постоянная цель, которая никогда не будет «завершена».
А как насчет файлов cad? Если файлы не заблокированы, чтобы быть доступными только для чтения, большинство программ CAD просто откроют их для изменения произвольных битов, которые будут отображаться как новый файл любым vcs. Так что, на мой взгляд, блокировка - идеальное средство для сообщения о своем намерении изменить какой-либо частичный файл. Кроме того, это в первую очередь мешает некоторому Программному обеспечению получить доступ на запись. Это позволяет обновлять локальные файлы без необходимости закрывать программное обеспечение или, по крайней мере, все файлы полностью.
Я не предлагаю использовать git в моей компании для той же проблемы. Мы используем советник для всех наших разработок и микрософт word для документации, мы заранее не знаем, кто может редактировать конкретный файл, так что эксклюзивная блокировка - наш единственный вариант.
git будет очень хорошо работать в некомандном окружении, где каждый разработчик несёт единоличную ответственность за кусок кода или файл, потому что в этом случае общение о замках не требуется.
Если вашей организации требуется командное окружение (обычно для того, чтобы лишить разработчиков безопасности работы), то используйте svn, git не для вас. Svn обеспечивает и контроль над исходным кодом, и обмен информацией между разработчиками о замках.