Коллега отправил мой код как свой собственный [закрыто]

Мы с моим коллегой Бобом работали над проектом, который предполагалось завершить вместе. Из-за отсутствия тайм-менеджмента он застрял на ошибке больше месяца. Сегодня Боб влил некоторый код в нашу основную ветку.

Проблема в том, что код, который Боб объединил в основную ветку, был кодом, который я написал (строка за строкой).

Я не уверен, как двигаться дальше отсюда. Я могу доказать, что первым написал код, но разве это имеет значение?

Как можно решить эту проблему с помощью пассивного менеджера?

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Также возможно, что Боб просто не знает, как работает git и/или ваш рабочий процесс git, и по ошибке зафиксировал ваши изменения в основной ветке (которую, я полагаю, вы зафиксировали в другой ветке).
Я разработчик, и я озадачен тем, в чем проблема. Ваш менеджер просматривает код и отмечает, кто что написал, и ставит более высокую «оценку» тому, кто написал больше строк кода? Мой менеджер большую часть времени даже не смотрит на мой код. Меня оценивают в основном на основании того, чего я достиг, а не «написал на 45677 строк кода больше, чем Боб».
Название вашего вопроса противоречит вашему вопросу.
Люди все время объединяют код, который они не писали. Где именно он утверждает, что написал это?
@ESR моя интерпретация такова, что этот коллега скопировал код ветки OP прямо в свою ветку
@crasic, вполне может быть, что это и произошло, но ничто из того, что упомянул OP, не заставляет меня обязательно интерпретировать это именно так. ОП, возможно, просто не знаком с тем, как работает git, насколько я знаю.
Какая разница, кто написал код? Вы не в одной команде? Разве компания, в которой вы работаете, не владеет всем кодом, который пишет ваша команда? Следовательно, это код вашей компании, а не ваш?
Привет, добро пожаловать на рабочее место.SE! К сожалению, заданный вопрос не имеет смысла: вы пишете «Боб слить некоторый код в нашу основную ветку», и вы, кажется, обеспокоены тем, что он пытается заявить об авторстве. Однако автор сохраняется для каждой фиксации , а не для слияния . Создавал ли Боб свои собственные коммиты, содержащие написанный вами код? Или он объединил ваши коммиты?
Проголосовал за закрытие, потому что Git работает, как сказал @sieske, и неясно, просто ли он объединил код (что нормально) или скопировал отдельные коммиты (что плохо).
@jcaron Ваше объяснение кажется очень вероятным. Я использую git каждый день, но почти никогда не работаю совместно и почти никогда не работаю более чем с одной веткой. Когда я сотрудничаю, мое невежество, честно говоря, пугает меня. Есть так много способов запутаться, и со стороны это довольно непрозрачная система. Бритва Хэнлона здесь ключевая.
Возможно, вам следует добавить, как Боб получил код, который вы написали? И почему это проблема для вас?
Код прокомментирован с подробностями обслуживания? Были ли физически изменены имена в коде? Честно говоря, меня больше беспокоят коллеги, которые прикрепляют мое имя к своей работе ;)
@JoeS кто-то отредактировал важную строку. Первоначальная версия жалуется на то, что Боб напрямую копирует некоторый код в свою собственную ветку, а затем объединяет ее.
Это похоже на одностороннюю историю. Не похоже, что он украл какой-то код или как он его украл? Любой может объединить любой код, это не проблема.
Вы сказали, что произошло, но не в чем проблема, которую вы хотели бы решить. Я читал этот вопрос несколько раз, и я не могу понять, что такое «проблема», которую вы хотите поднять со своим «пассивным менеджером». В чем именно "проблема"?
@MattSamuel Проще говоря, если руководство использует отчеты из системы контроля версий для измерения прогресса, похоже, что ОП был тем, кто ничего не делал в течение месяца, а Боб делал всю работу. Серьезные последствия во время следующего раунда обзоров производительности.
Как вы ее решили в итоге? Я прекрасно понимаю вашу ситуацию. Если Боб — опытный разработчик, он должен знать, как работает git, тогда, скорее всего, это этическая проблема. Я бы выяснил, почему это произошло, спросив его, как он на самом деле сделал слияние или выборку, и выдал бы этот факт, не принимая его напрямую. Сохраняйте спокойствие и просто указывайте факты. Он либо вырезал и вставлял, либо намеренно переопределял авторов во время слияния.

Ответы (15)

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

Это не является незаконным, как в суде, но это неправильно, и ваш менеджер должен об этом знать. Скажи ему, что если он сделает это снова, ты снова на него сообщишь.

Да, все, что вы действительно можете сделать, это сообщить вашему менеджеру о ситуации. Ему решать, что делать (если что). Обязательно объясните в нейтральной форме, что именно произошло. Не говорите просто: «Он украл мой код».
Поскольку этот разработчик достаточно глуп, чтобы использовать контроль версий для плагиата вашего кода, вы можете тривиально доказать, что написали его. Никто просто не сидит и не пишет страницы и страницы нового кода... все начинается с клонирования ветки, коммитов, тестовых прогонов, затем последовательных коммитов рабочего, но неполного кода... у вас есть все промежуточные коммиты разработки и временные метки ( Я полагаю?), он не...
@Krumia Сказать ему, что вы сообщите, это то, что вы сделаете, и это не зависит от того, что сделает босс.
Еще одна веская причина сообщить об этом: если он скажет, что это его код, ваш менеджер подумает, что вы ничего не сделали, и решит, что вы ленивый.
При сообщении, вероятно, будет полезно быть одновременно заниженным и правдивым. Например, вы обращаете на это внимание вашего руководителя, потому что: А) вы думаете, что он должен знать о том, что произошло, потому что вы считаете, что это проблема управления, и Б) вы недовольны тем, что ваш коллега сделал это. Две вещи отделены друг от друга. Я совсем не уверен, что связался бы с другим сотрудником напрямую, по крайней мере, до тех пор, пока я не написал бы менеджеру и не поговорил бы с ним/ней в последующем.
Если бы я был менеджером / руководителем в такой ситуации, первый вопрос был бы: почему у OP был код, который решил проблему бедняка и позволил ему работать над проблемой. Повторное использование кода — это хорошо. Если только я не дал одну и ту же задачу двум людям и заставил их соревноваться, что кажется пустой тратой ресурсов. Я хочу сказать, что обращение к менеджеру и рассказ о том, что произошло, как в вопросе, может иметь неприятные последствия, по крайней мере, немного.
@ luk32 Мне непонятно из вопроса, содержало ли коммит исправление, которое, по словам коллеги, должен был создать, или что-то совсем другое . Я обратился с просьбой разъяснить вопрос.
Я согласен с этим, за исключением необходимости сказать ему. Пусть этим занимается менеджер, это его работа, и у него будет способ справиться с этим, который учитывает гораздо больше, чем вы можете себе представить.
@corsiKa Manger ничего не может сделать, если об этом не сообщат. Скажите, что у человека, о котором вы будете сообщать, есть цель.
@Nelson «Доказательство» не так уж тривиально, если плохой парень использовал команды GIT «переписать историю», а команда проекта в целом придерживается «непрофессионального» подхода к хранению резервных копий. Тот факт, что «он не делал никакой работы в течение месяца», не обязательно означает «он ничего не знает» — может быть, он достаточно умен , чтобы понять, как не делать никакой работы в течение месяца, и придерживаться последствия на кого-то другого!
@paparazzo Но если вы сообщите человеку, о котором вы сообщили, это может иметь для вас значительный негативный эффект. Возможно, менеджер предпочел бы, чтобы сотрудник не знал, кто на него доложил. Лучше всего, чтобы менеджер справился со всеми коммуникациями в этом отношении.
@corsiKa Если у вас есть другой ответ, вы можете опубликовать его. Это мой ответ, и я придерживаюсь его.
Я предполагаю, что в прошлом я несколько раз "плагиатил" код. Я создал ветки на ветках коллег, если у них есть полезные функции, которые мне тоже понадобятся. И, конечно, может случиться так, что проще просто слить мою ветку с мастером (после получения всех их изменений), чем сначала слить их, а потом уже мою. Почему это проблема? (Единственный способ, которым это могло бы быть проблемой, был бы, если бы подход к управлению был «каждый просто делает то, что хочет, и мы посчитаем, сколько LoC вы написали в конце»)
Менеджер OP подумает, что они сумасшедшие, если они возьмутся за то, кто объединил, какой код освоить, если только это не нарушило какую-либо политику, например обход проверки кода.

Вы должны отправить ему электронное письмо, в котором говорится что-то вроде:

Я вижу, что вы переместили код из моей ветки в главную ветку. Пожалуйста, имейте в виду, что история изменений важна для такого рода продуктов, поэтому следует избегать вырезания и вставки кода в основную ветку, как это сделали вы; скорее, код должен быть отправлен из ветки, в которой он был разработан.

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

Я бы посоветовал не вступать с ним в прямую конфронтацию. Это случай грубого нарушения. Я бы сразу к директору.
Менеджер может не понять, что это значит.
Вы могли бы быть более ясным, чтобы менеджер также понял. По-прежнему сосредоточен на целостности и процессах, но более подробно рассказал о том, что коллега назвал свое имя чужой работой: «При копировании содержимого моих коммитов система теперь показывает вас как автора, хотя я написал код. Это может вызвать проблемы, если другие у людей есть вопросы по коду или им нужна поддержка, так как они не увидят настоящего автора».
Для меня просто CC'ировать менеджера слишком пассивно-агрессивно. Позвольте менеджеру разобраться с этим, если он считает, что с этим стоит разобраться, и отдельно сообщите менеджеру, что вы недовольны тем, что ваш коллега сделал это. Для этого есть менеджеры.
Бритва Халона. Не исключено, что по своей лени этот сотрудник просто сделал то, что было проще всего. Что, возможно, включало копирование вашего кода в его ветку (поскольку я признаю, что иногда был слишком ленив, чтобы иметь дело с системой контроля версий), чтобы убедиться, что у него есть обновленная версия, и он исправил свою ошибку в ней.
Этот. Не сосредотачивайтесь на его «краже» кода. Сосредоточьтесь на вопиющей безответственности отказа от истории изменений и фиксации одного огромного блоба, который не документирует какие-либо сделанные изменения или то, как они были получены.
@FaridNouriNeshat добавление чего-то вроде «В будущем, если возникнет проблема с этим, люди могут спросить вас об этом, думая, что вы написали это, когда на самом деле это сделал я», может помочь показать менеджеру, почему это важно, и в будущем, если вы действительно хотите обратиться к менеджеру по поводу кражи кода (потому что они признают это или что-то в этом роде), тогда у вас уже есть электронное письмо с упоминанием неправильной атрибуции.
Не стоит рассчитывать на то, что менеджер будет анализировать философский аспект письма, со всеми предположениями, контекстом и выводами. Если бы я торопился, я бы прочитал это письмо как «кто-то объединил не ту ветку, но это не проблема».
Если бы я торопился, я бы прочитал это письмо как: (1) Боб добавил много нового кода. (2) Он сделал какую-то непонятную техническую ошибку, которую я не совсем понимаю. (3) Почему я на CC? (4) Должен похвалить Боба за его фиксацию в следующий раз, когда я увижу его. И, возможно: (5) Разве у SomeUser нет реальных проблем? Неудивительно, что он ничего не делает...
Я проголосовал за это из-за духа, который я в него вложил. Я также согласен, что это очень плохо сформулировано, если только менеджер не знает vcs.
Конечно, менеджер должен знать, что такое SCM commit и copy and paste, они высокооплачиваемые, а не глупые.
+1 не веди себя так, будто он намеренно украл твой код. Действуйте так, как будто он неправильно использовал git. Только когда он начинает предъявлять претензии, то перерастает в воровство. Старое правило гласит: «Никогда не приписывай злому умыслу то, что можно отнести к простой глупости». Глупость всегда является обычным подозреваемым.
Несколько месяцев назад я запросил репозиторий исходного кода для своей команды, и одним из бизнес-обоснований было «упростить другим группам кражу нашего кода».
Это слишком пассивно-агрессивно.

Вы кажетесь достаточно злым, чтобы вызвать коллегу на дуэль, но многие разработчики более сдержанны и могут оценить более тонкий подход к восстановлению справедливости.

Вы можете отправить электронное письмо тому, кто согласился, с вашими «опасениями» по поводу того, что ваш код, который все еще находится в разработке, появляется на мастере. Вам даже не нужно делать никаких утверждений; пусть сами "разбираются" в том, что произошло. Скажите, что ваш код должен быть хорошим, но вы не закончили тестирование и настройку и озадачены/обеспокоены тем, как он превратился в мастер без отправки запроса на включение.

Это устраняет большую часть драмы, но сохраняет хорошую возможность для вашего коллеги получить выговор, как только они выяснят, как код ненадлежащим образом попал в master. Я вижу, как некоторых технически мыслящих людей отталкивает конфликт, что делает их менее заинтересованными в том, чтобы копаться в нем, но они почти наверняка захотят выяснить, что произошло, если подойти к ним как к «какому хрену», а не кажущемуся возмутительным обвинению.

Если все так, как утверждается, расследование будет кратким и убедительным. Похоже, вы в любом случае лучше работаете, так что время просеет зерна от плевел; быть великодушным и не "бить вниз" в офисной политике.

Это лучший ответ. Придерживайтесь процесса и не делайте его личным. И если вы собираетесь обвинить кого-то, вам всегда нужна вторая пара глаз на улики.
Мне нравится этот ответ ... за исключением того, что вы на самом деле не озадачены ... вы знаете, как он попал в мастер. Я был бы более прямолинеен и сказал бы что-то вроде «похоже, что X вырезал и вставил мой код, а не зафиксировал его, но это кажется действительно странным, поэтому я хотел проверить, что произошло». Это 1. не делает вас похожим на идиота, который не может читать историю коммитов и 2. не тратит чье-то время на изучение той части, которую вы уже знаете.
Согласовано. Что-то вроде: «Я вижу, что вы взяли код из моей ветки разработки (ссылка) и отправили его в master из своей собственной (ссылка). Этот код был незаконченным и не должен был быть взят. Пожалуйста, обращайтесь ко мне в будущем, прежде чем интегрировать мой незавершенный код. Также было бы лучше использовать инструмент слияния VCS (а не копирование и вставка), чтобы сохранить метаданные истории и авторства. Спасибо!" СС вашего менеджера.
Я бы добавил еще один вариант: «Я понял, что этот запрос на вытягивание почти полностью состоит из кода, который я написал; поэтому мне кажется контрпродуктивным просматривать его, а также писать его».
@TimB: я разделяю ваше беспокойство по поводу подхода, но «идиот» - это слишком далеко; это может быть опечатка в сценарии, которая его подтолкнула, кто-то действует под принуждением и т. д.; крайняя польза от сомнения, основанного на незнании со 100% уверенностью всей истории. Я считаю, что время начальства будет потрачено на исследования, несмотря ни на что. Я мог бы встретить вас на полпути чем-то вроде « похоже, что X мог подтолкнуть его, но это не имеет смысла». Хотя правда — это оправдание для обвинений, речь идет скорее о том, чтобы позиционировать себя как командного игрока в невзгодах и способствовать гармонии на рабочем месте.

Вау, Бетти, давайте разберем это:

Сотрудник полностью украл код и утверждает, что написал его полностью

^ Это довольно серьезно. Если он ходит и говорит людям: «Это работа, которую я сделал», то обязательно скажите своему менеджеру: «Эй, я просто хотел бы указать вам на эту страницу github, чтобы показать, что я автор всей этой работы, в то время как Боб слился только этот. Я указываю на это, потому что не хочу, чтобы у вас сложилось впечатление, что я не выполняю свою часть работы, и в то же время меня беспокоит, что Боб пытается взять на себя кредит за работу, которую он не сделал».

Но

Сегодня Боб объединит некоторый код в нашу основную ветку.

Действительно ли Боб «утверждает», что он все это написал? Или он просто объединил ветку с мастером, и никто не знает/не заботится о том, какое имя стоит рядом с этим коммитом слияния? В моей компании, если только руководство не анализировало какую-то катастрофу, никто не стал бы смотреть, кто автор какой фиксации.

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

Этот. Кому на самом деле интересны строки кода? Менеджеру будет интересно, решена ли проблема его разработчиками, а не кто какие строки написал.

У тебя был код. Он использовал этот код для выполнения своей задачи. Эта часть вполне приемлема. Нет причин писать решение, когда существующее решение работает.

Вы хотели кредит на код. Вы упомянули, что он использовал такой язык, как я и я, в коммитах git, содержащих ваш код. Коммиты Git не должны быть инструментом управления или инструментом для присвоения чести выполненной работе. Используемое программное обеспечение или система управления проектами должны определять, кто и за что получает кредит. Если вам обоим поручили одну и ту же задачу, руководство, скорее всего, ожидает, что вы будете использовать идеи и код друг друга. Честно говоря, вы оба должны быть в одной ветке, если это совместная задача.

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

Сначала следует поговорить с коллегой. На данный момент кажется, что это произошло только один раз. Я часто коммитил код моих коллег и позволял коллегам коммитить мой код. Однако, если это касается вас, не стесняйтесь сказать ему, что история git важна, и вы хотели бы, чтобы ваше имя было прикреплено к любому вашему коду, который был зафиксирован. Настаивайте на том, что если в коде есть ошибка, вы не хотите, чтобы его ложно обвинили.

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

Я не думаю, что повторное использование кода здесь то же самое. Если вы разместили код на github или с открытым исходным кодом, ожидается, что код будет повторно использован, возможно, без вашего согласия, разрешения или ведома. ОП предполагает, что человек не может работать и просто копирует/повторно использует свой код, чтобы заставить его работать. Это похоже на то, как если бы вам нужно было сдать 100-страничную работу в классе, вы видите, как одноклассник сдает свою работу на столе учителя, а учитель ее не видит, и вы быстро проводите ее, стираете его имя и ставите свое. Это этично? Нет, не совсем.
Я также должен добавить, что когда вы фиксируете код в рабочем репозитории, ожидается, что он будет изменен и потенциально повторно использован без вашего согласия или подтверждения. Предполагается, что вы совершили работу и, возможно, сразу модифицировали для исправления багов или ошибок. Нет ничего неслыханного или неожиданного в том, что после проекта кто-то возвращается, чтобы исправить ошибки или исправить ошибки или даже провести рефакторинг/редизайн, чтобы сделать его более читабельным для будущих обновлений. ОП этого не предлагает.
@Dan OP работает над проектом вместе со своим коллегой. ОП не ожидает, что его коллега решит проблему, которую он уже решил. Он ожидает похвалы за свою работу. Лучшей аналогией являются школьные групповые проекты. Как и в школе, кредиты не всегда справедливо распределяются по групповым проектам. Я не думаю, что есть что-то плохое в том, чтобы зафиксировать код ваших коллег в групповом проекте. Прямо сейчас это единичный инцидент, и более крупная проблема ОП - это навыки или трудовая этика его коллег, и он беспокоится только о том, что его коллега может маскировать это как побочный эффект этой основной заботы.
@Goose Это работа, а не школа. Это не «твой код», а «его код». Они оба являются «кодом компании». Я согласен с тем, что приписывать себе чью-то работу неправильно, но причина этого не в том, что «то, что он сделал, было кражей».
@alephzero Не уверен, что вы хотели ответить Дэну или неправильно поняли мой комментарий. В любом случае я согласен со всем в вашем комментарии и думаю, что мы на одной странице.
+1 Похоже, если ваша компания использует контроль версий для проверки объема работы, выполненной членами команды, в компании что-то не так — это похоже на подсчет строк кода, известная бесполезная практика! Вы должны работать вместе и отправлять код как команда. Однако, если они не выполняют возложенную на них работу, это проблема, и, возможно, вам следует предложить им объединиться и помочь.

Сообщите об этом руководству. Прочтите также руководство для сотрудников вашей компании, вероятно, у них есть политика в отношении неэтичного поведения, а также то, как они сообщают об этом.

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

Я бы добавил, передайте это НАПРЯМУЮ руководству, прежде чем говорить что-либо своему коллеге, взять на себя их инициативу в том, как с этим справиться.

Ваша цель — убедиться, что вы получили признание за написанный вами код?

Представление о том, что код «ваш», как правило, не лучший способ думать о работе, которую вы выполняете для компании. Код, который вы пишете, вам не принадлежит; он принадлежит компании. Не должно иметь значения, был ли код зафиксирован из вашей ветки или из ветки Боба. У вас с Бобом есть общая цель — выполнить все задачи, необходимые для продукта.

Одно дело, если ваш менеджер считает, что вы не берете на себя ответственность, в отличие от Боба, но ваш вопрос звучит так, будто вы чувствуете себя ограбленным.

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

Похоже, худшее, что сделал Боб, — ​​это не следовать передовым методам использования системы управления версиями. Слияние ваших изменений позволило бы улучшить историю изменений, чем копирование/вставка ваших изменений. Разумно ему это объяснить, и объяснить причины. Но из информации, которую мы имеем в вопросе; это не проблема, когда вам нужно что-то официально написать и обязательно скопировать вашего менеджера. Просто невзначай скажи ему об этом.

Это единственный правильный ответ здесь (пока). Компания заплатила за разработку кода, поэтому код принадлежит компании. Не существует таких вещей, как «код Алисы» и «код Боба», если Алисе и Бобу платит одна и та же компания.

Это звучит как неудачное слияние; Я не претендую на то, что понимаю git достаточно хорошо, чтобы точно знать, почему это происходит, но Visual Studio иногда создает коммиты в локальном репозитории, когда вы используете IDE для разрешения конфликтов слияния. Это отображается в истории как принятие всех изменений в удаленный репозиторий, применение их к собственному репозиторию, их фиксация, а затем применение этой фиксации к удаленному репозиторию.

Рациональное объяснение здесь состоит в том, что Боб щелкнул по процессу слияния, не понимая его по-настоящему, и сгенерировал историю контроля версий, которая вводит в заблуждение. Работая над этим предположением, спросите его о нем с намерением научить его правильному слиянию, давая преимущество сомнениям в том, что проблема является ошибкой.

Сначала определите, в чем проблема . Это не совсем ясно из вашего вопроса, как задано.

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

Ваше имя должно быть во всем коде, который вы написали. Это не вопрос гордости или получения кредита, который вам причитается — вам нужна неповрежденная история, чтобы люди знали, кто написал какую строку кода и с кем поговорить, когда они столкнутся с ошибками или странными дизайнерскими решениями в будущем. Если вашего имени больше нет, то ваш коллега — это тот, кто отвечает на вопросы о вашем коде и берет на себя вину за ваши ошибки!

Используйте свою IDE или инструмент управления исходным кодом, чтобы аннотировать код и посмотреть, действительно ли его имя присутствует в каждой строке. В общем, не имеет значения , кто слил код — их имя появляется только в этом коммите, а не в каждой строке кода в этом коммите . Это разваливается, если он неправильно объединил ветки, чтобы это произошло, и это то, что ему нужно сделать правильно.

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

Это во многом зависит от динамики вашей компании. В моем случае (что, как мне кажется, является нормой для большинства профессиональных софтверных компаний), я был бы почти рад, если бы мое имя исчезло из кода, который я написал... Теперь у меня нет людей, задающих мне вопросы о глупых решениях, которые я принимал. сделано в моем коде месяцами ранее! :)

«Я был бы счастлив, если бы мое имя исчезло из кода, который я написал…» Ха-ха-ха, возможно, я слишком сочувствую этому. Меня только сегодня спросили об изменении кода в 2014 году, до нашей нынешней системы отслеживания работы... и, поскольку я ушел на год и вернулся в качестве подрядчика, у меня нет всех моих журналов. Я смог проследить это по комментариям, которые я оставил... но это заняло полдня, и команда (в основном я) была в шоке.

Честно говоря, учитывая предоставленные детали, все говорящие сообщают об этом! просто кажется мне серьезной чрезмерной реакцией.

Мой коллега и я работали над проектом более 2 лет, обмениваясь коммитами туда и обратно, и да , иногда мы повторно использовали или оптимизировали код друг друга.

Я не знаю, в какой культуре вы работаете, но если она каким-то образом определяет работу строками кода, а не конечным продуктом и общим вкладом, она кажется довольно токсичной и конкурентной. Мой совет: не взбегайте по служебной цепочке в поисках какой-то формы возмездия. Если для вас это так важно, поговорите со своим менеджером о том, как определить кредит для вещей, а затем задокументируйте, как они описывают.

Вопрос, который я больше всего хотел затронуть, касался ваших отношений с вашим коллегой. По моему честному мнению, если бы мой коллега однажды подошел ко мне и воскликнул: «Не используйте мой код! Это мой код!», а затем вызвал бы у меня проблемы с руководством из-за того, что я не делал намеренно или злонамеренно, я подумает, что он самодовольный дурак. Я хотел бы иметь это в виду, потому что из вопроса неясно, действительно ли они украли ваш код или, возможно, просто странным образом объединяли изменения.

Обвинение (которое является серьезным обвинением) - если оно не разрушит полностью ваши профессиональные отношения, то, безусловно, понизит их личное мнение о вас. Ничего страшного, если ты прав. Я сторонник мышления типа «вы копаете себе могилу», но если вы ошибаетесь , ущерб вашим рабочим отношениям может быть весьма существенным. Офисная политика - штука хитрая!

Теперь, если вы абсолютно уверены, что он ворует и присваивает себе заслуги за то, чего он не делал, не стесняйтесь обращаться к своему руководителю и принять соответствующие меры, чтобы убедиться, что он получил выговор за такое поведение, однако, если вы не совсем уверен , возможно передумаю. Плагиат — это не то, на что можно претендовать легкомысленно, особенно когда он может повлиять на вашу повседневную жизнь в течение довольно долгого времени.

Метаинформация, такая как авторство, существует в системе контроля версий, такой как git, не столько для отслеживания прав собственности , сколько для помощи в понимании того, как что-то стало таким, какое оно есть.

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

Такие вещи , как рефакторинг или даже применение недавно установленных правил пробелов к блоку кода, требуют того, что git считает новым авторством, поскольку git понимает только буквальные детали, а не смысл. И это только в тех случаях, когда код продолжает использоваться в исходной роли и в точном местоположении файла.

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

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

Учитывая это, хорошим способом действий может быть попытка использовать процесс проверки кода, чтобы окончательное слияние оспариваемого кода было выполнено под более описательным сообщением, в котором описывалось его фактическое происхождение. И выдвигать этот аргумент не столько для того, чтобы сохранить «право собственности» на вклад, сколько для того, чтобы сохранить знание того, откуда взялся код, какова его связь с другим кодом, и чтобы иметь более полный список тех, у кого запрашивать информацию в случай трудности .

Обсудите с коллегой и руководителем, что происходит на самом деле, но не обвиняйте их в намерениях.

Что на самом деле происходит, так это то, что они объединили ваш код, как если бы он был их собственным. Это могло быть сделано из личной вендетты, чтобы выставить вас дураком, но это обвинение в намерении, которое гораздо сложнее доказать, и, основываясь только на том, что вы опубликовали, нет ничего, что указывало бы на злой умысел со стороны вашего коллеги. .

Сосредоточьтесь на том, чтобы сделать это обучающим моментом, предполагая, что он не знает, как правильно использовать git. Git предоставляет множество способов, позволяющих разработчику повторно использовать код другого разработчика, сохраняя при этом авторство. Двумя основными инструментами здесь являются команда слияния и выбора вишни.

Скажите им, чтобы они знали, что сохранение авторства метаданных и истории важно в проекте.

Я не знаю, замечали ли вы это, но когда у вас есть система управления исходным кодом и два человека вносят идентичные изменения, вы столкнетесь с множеством «конфликтов слияния», которые превращают слияние в трудоемкую и подверженную ошибкам операцию.

Так что на следующем собрании команды, где обсуждаются всякие штуки, можно сказать "... и в будущем, я был бы признателен, если бы никто не брал неполные изменения из моей ветки и не сливал их в основную ветку. Я потратил час впустую и часы работы по разрешению конфликтов слияния из-за этого». Вполне возможно, что ваш начальник потом спросит, кто такую ​​ерунду натворил, и теперь вы можете называть имена начальнику, не выглядя при этом стукачом.

Слейте его код, указав, что он его написал. Управление своими слияниями — жизнеспособная стратегия. кажется, он не знает, как работает GIT, и забыл синхронизировать ваши изменения. Коммиты со всем кодом других людей автоматически генерируются такими инструментами, как исходное дерево, в случае, если люди используют плохую стратегию слияния.

Что неправильно, так это указание «мой код» в описании сообщества.

Когда я сталкиваюсь с ошибкой в ​​течение дня (месяц кажется слишком большим. Никогда не задерживался на ошибке в течение месяца) и я объединяю изменения, я специально говорю, что слияние включает мое исправление плюс предыдущий код из других, и даже делая это, это не так. похоже, я передал код от других.

Если ваш коллега работает над веткой, он должен сначала объединить основную ветку со своей. Тестовое задание. Затем слейте его ветку обратно. Это сохранит историю ваших изменений.

Если он начнет копировать код из вашей ветки без слияния, а затем отправки, у него дела обстоят еще хуже. Он работает над версиями, которые могут привести к появлению новых ошибок.

Я бы ввел политику коммитов для соблюдения и заставил бы всех уважать эту политику. Я бы предпочел больше беспокоиться о его навыках желудочно-кишечного тракта. Это может вызвать хаос

Да, однажды это случилось со мной с очень необычным коллегой. Однажды специалист по контролю качества сказал мне, что мой код выглядит точно так же, как у этого другого сотрудника. Я вошел в GitHub и заметил, что код очень похож на мой, но сначала я отмахнулся от того, что, возможно, поскольку мы размещаем несколько сайтов, использующих один и тот же файл, код просто такой же, поскольку он делает одно и то же.

Со временем я заметил, что коллега сказала, что она работала над «рефакторингом кода» во время ежедневных стендапов до последнего дня спринта, а затем сказала, что ее код не готов в последний день и ему нужен дополнительный день, а затем загадочным образом на следующий день. день сотни строк кода были отправлены по запросу на вытягивание. Я посмотрел на код и заметил, что код похож на мой, вплоть до орфографической ошибки, которую я сделал. Затем я понял, что человек ждал, пока я подниму свою ветку, и она будет наблюдать и копировать вещи с нее.

Я был в ярости, как и ты. В основном потому, что коллега не пришел ко мне, чтобы спросить, что я с удовольствием помогу или направлю. Это была одна из немногих причин, по которым я решил покинуть компанию после того, как рассказал об этом менеджеру, которому, похоже, было все равно. Мой совет — сообщить об этом менеджеру, допустив орфографическую ошибку, которая, как вы можете доказать, не может быть воспроизведена случайно. Таким образом, вы можете сказать, что это никак не может быть простым совпадением.

Значит, у вас обоих была точно такая же задача? Я могу понять домашнее задание, которое копируют ученики, но в компании люди обычно работают над разными вещами, которые можно объединить в нечто большее.
Я согласен, что это требует дополнительных объяснений.
Если бы они проводили рефакторинг, это должно было бы быть действительно очевидно — большие изменения, кроме ваших. Возможно, им также придется интегрировать ваши изменения со своими, поэтому может показаться, что они проверяют ваш код. Вам, ребята, вероятно, следует чаще синхронизироваться друг с другом — я стараюсь интегрировать по крайней мере ежедневно — часто много раз в день.
@fafl Компания использует многоуровневый сайт, поэтому иногда да, поэтому сначала я подумал, что это просто совпадение. Но в других случаях это отдельный проект. В любом случае, этот человек никогда не разговаривал со мной и просто ждал, пока я закончу копировать код. Мы должны работать индивидуально над нашим спринтом, но совместная работа является обязательной с очевидной общей кодовой базой. Я чувствую, что это сильно отличается от совместной работы или командной работы, потому что человек никогда не упоминал о препятствиях во время ежедневных стендапов и просто ничего не делал на протяжении всего спринта. пока люди (включая меня) не сделали запрос на включение.