Ru/Using Source Control with the Source SDK: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
(New page: {{toc-right}} В этой статье описывается как использовать контроль исходного кода с Source SDK. Н...)
 
m (obsolete language category)
 
(12 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{toc-right}}
{{lang|Using Source Control with the Source SDK|title=Использование Source Control с Source SDK}}{{toc-right}}{{translate}}
В этой статье описывается как использовать [[Wikipedia:Revision control|контроль исходного кода]] с Source SDK. Его необходимо использовать даже если вы работаете в одиночку, т.к. он в большой степени автоматизирует процесс слияния обновленного кода, выпущенного через Steam. Без контроля исходного кода каждое такое обновление доставит вам массу хлопот.


В этой статье описывается как использовать [[Wikipedia:Revision control|контроль исходного кода]] с Source SDK. Необходимо использовать контроль исходного кода даже если вы работаете в одиночку, т.к. он в большой степени автоматизирует процесс слияния обновленного кода, выпущенного через Steam. Без контроля исходного кода каждое такое обновление доставит вам массу хлопот.
В этой статье обсуждается ситема [[Wikipedia:Perforce|Perforce]], которая используется компанией Valve. Эта система бесплатна, если кол-во её пользователей не превышает двух человек. Команды, содержащие большее кол-во человек, могут использовать полностью бесплатные альтернативные продукты, вроде [[Wikipedia: Subversion (software)|Subversion]], но и для них эта статья окажется полезной: все системы контроля версий работают примерно одним и тем же образом. Для пользователей Subversion доступно {{L|Using Subversion for Source Control with the Source SDK|отдельное руководство}}.


This document discusses [[Wikipedia:Perforce|Perforce]], the source control system used internally by Valve. It’s free for up to two users. Larger teams can use completely free alternatives like [[Wikipedia: Subversion (software)|Subversion]] without rendering this page useless: version control systems all work with the same high-level processes. There is also a [[Using Subversion for Source Control with the Source SDK|separate tutorial]] for Subversion users.
''Примечание переводчика: для'' '''subversion''' ''есть замечательная программная оболочка [https://www.tortoisesvn.net TortoiseSVN], которую можно скачать [https://tortoisesvn.net/downloads здесь]. TortoiseSVN поддерживает русский язык (снизу на странице закачки), и имеет [https://tortoisesvn.net/support русское руководство], что поможет лучше разобраться с контролем исходного на первых парах.''


== Before you begin ==
== Прежде чем мы начнём ==


If you have started programming without source control, '''STOP!''' Source control needs to be set up at the earliest opportunity, especially since every time a Steam update is released older versions of the base SDK code are lost.
Если вы уже начали программировать без контроля исходного кода, то '''ОСТАНОВИТЕСЬ!'''. Контроль исходного кода необходимо начать использовать как можно раньше, поскольку после того как выходит новое обновление для Steam старые версии SDK-кода становятся недоступными.


If you’re reading this as you try to apply an update that’s already out to your unversioned code, it is too late, and you must merge the changes the hard way. Tools like [http://www.scootersoftware.com Beyond Compare] can make this process easier, and if you follow this tutorial after finishing it should be the last time you ever have to endure it.
Если вы хотите применить недавно вышедшее обновление SDK с помощью Perforce к вашему "неконтролируемому" коду, то уже слишком поздно и вам придётся вносить изменения трудным способом. Такие утилиты как [https://www.scootersoftware.com Beyond Compare] могут облегчить этот процесс, а если после внесения изменений вы последуете рекомендациям, изложенным в этой статье, то это будет последний раз, когда вам придётся это делать.


=== Get Perforce ===
=== Где достать Perforce ===


With that out of the way, you’re going to need to download Perforce. [http://www.perforce.com/perforce/downloads/ntx86_64.html Get the first two downloads from this page]:
Прежде всего вам необходимо где-то загрузить Perforce. [https://www.perforce.com/perforce/downloads/ntx86_64.html Загрузите первые два пакета с этой страницы]:


*'''Perforce Server Windows Installer'''
*'''Perforce Server Windows Installer'''
*'''P4V Installer'''
*'''P4V Installer'''


Ignore the ‘P4Win Installer’ further down the page, it’s legacy software now. Take care when installing to leave the network server configuration alone unless you are actually connecting over a LAN or the internet.
Не загружайте ‘P4Win Installer’ - это устаревшее приложение. Избегайте собственноручной найстройки сетевых параметров во время установки, если только вы действительно не планируете подключаться через локальную сеть или интернет.


[http://www.perforce.com/perforce/technical.html Perforce provide documentation of their own] which you may want to consult before using or instead of this article. It isn’t as specific as this page, however.
[https://www.perforce.com/perforce/technical.html Perforce предоставляет собственную документацию], с которой вы можете ознакомиться вместо этой статьи. Эта статья предоставляет более узкоспециализированную информацию.


{{tip|If you make a mistake and need to reset Perforce’s database, execute this from the command prompt: <code>p4 obliterate –y //depot/...</code>. DON’T do this on a database that's already up and running!}}
{{tip|Если вы сделали ошибку и хотите перезапустить базу данных Perforce, то запустите это из командной строки: <code>p4 obliterate –y //depot/...</code>. НЕ делайте этого с базой данных, которая уже установленна и работает!}}
sv
== Обзор ==


== Overview ==
Теперь установим свежую копию SDK-кода, с помощью мастера {{L|Create a Mod|создания модификаций}} и передадим его в Perforce, который его подцепит. Затем мы создадим ‘ветвление’ (дубликат) этого подчиненного кода в другом каталоге.


We will install a fresh instance of the SDK code with the [[Create a Mod]] wizard and submit it to Perforce, which will file it away. We will then ‘branch’ the submitted code to a second instance at another location.
С помощью этого ответвленного кода вы будете создавать свою модификацию, изредка обновляя копию, подцепленную Perforce'ом, если вам надо будет сделать резервную копию. Первый экземпляр кода будет оставаться в неприкосновенности до тех пор, пока не выйдет обновление SDK-кода; тогда вы установите это обновление в него прежде чем интегрировать его в ваш ответвленный код. Так как Perforce знает какие файлы изменены, он будет отличным помощником в этом процессе.


It is this branched code with which you will create your mod, occasionally updating Perforce’s filed copy when you need to make a backup. The first instance will remain untouched until a code update is released, at which point you will install the updated code to it before ‘integrating’ it into your branched mod code. Because Perforce knows when the two codelines separated, it will be of great assistance during this process.
== Настройка контроля исходного кода ==


== Setting up source control ==
SDK-код Valve станет ‘стволом’ вашей кодовой базы, от которого будет ‘ветвиться’ код вашего мода. Создайте его с помощью мастера {{L|создания мода}}. Ваша пользовательская папка будет неплохим местом для его хранения, особенно если вы используете Windows Vista, но поместите его в подпапку, созданную специально для SDK-кода - другая папка, содержащая код вашего мода, будет создана позже.


Valve’s base SDK code will form the ‘trunk’ of your codebase, from which your mod code will ‘branch’. Create it with the [[Create a Mod]] wizard. Your user folder is the best place to store it, especially if you’re using Windows Vista, but put it in a subfolder especially for the base SDK code - the one specifically for your mod's code will be created later.
{{tip|Так как вы не будете производить много изменений над вашим стволовым кодом, неплохой идеей станет его архивация. Вы можете использовать окно задания свойств папки чтобы отключить индексацию и включить архивацию. Или еще лучше заархивируйте эту папку в один архив после того как закончите читать это руководство.}}


{{tip|Since you won’t be spending much time with the trunk code, it’s a good idea to archive it. You can use it’s folder’s Properties dialogue to disable indexing and enable compression. Or better still, once you’re done with this tutorial zip its contents up into an archive file.}}
=== Создание рабочего пространства ===


=== Create the workspace ===
Теперь начнём работу с Perforce. Запустите P4V - графический клиент. Вас будет приветствовать диалог “Open Connection”.


Now we’ll start using Perforce. Start P4V, the visual client. You will be greeted by the “Open Connection” dialogue.
[[File:P4 openconnection.png|center|Диалог “Open Connection” программы Perforce]]


[[Image:P4 openconnection.png|center|Perforce open connection dialogue]]
Если вы не хотите подключаться через сеть, то можете проигнорировать все опции этого диалога, кроме опции 3, которая определяет к какому рабочему пространству вы присоединитесь. Нажмите кнопку ‘new’ справа и назовите рабочее пространство, например, <code>valvesrc</code>.


Unless you are actually connecting to a network server you can ignore all of the options it gives you except step 3, which defines the ‘workspace’ you’ll connect to. Click ‘new’, to the right, and name the workspace <code>valvesrc</code>, or words to that effect.
Рабочие пространства это локальные копии файлов с сервера Perforce. После того как вы закончите у вас будет одно пространство для стволового кода и одно для кода ответвления. И любой, кто будет с вами работать, будет иметь такие же рабочие пространства у себя.


Workspaces are local copies of files on the Perforce server. You’ll have one for Valve’s trunk code and one for your branch code by the time you’re finished, and anyone else working with you will have their own workspace on their machine as well.
Названия большенства полей диалога рабочего пространства говорят сами за себя, и вам необходимо обратить внимание только на два из них: Root и View. Параметр Root должен указывать на папку, в которую вы только что установили немодифицированный SDK-код, тогда как View указывает на локацию, в которой код будет храниться на сервере Perforce (‘depot’).


Most of the fields in the workspace dialogue should be self-explanatory, and you only need to worry about two anyway: Root and View. Root should point to the folder to which you just installed the unmodified SDK code, while View is the location at which the code will be stored on the Perforce server (the ‘depot’).
Для параметра View используется специальный синтаксис. Часть до пробела определяет виртуальный диск, к которому будет присоединено рабочее пространство, а часть после него определяет подпапки на этом диске. Таким образом вы можете создавать независимые рабочие пространства или объединять зависимые.


There’s a special syntax for Views. The section before the space defines the virtual drive that the workspace will be linked to, while the section after it defines a subfolder on that drive. In this way you can create workspaces with files that are either independent or pooled together.
Для наших целей необходимо одно независимое. Используйте следующее значение параметра View:
 
For our purposes, we want one that’s independent. Use the following value for View:


  //depot/valvesrc/... //valvesrc/...
  //depot/valvesrc/... //valvesrc/...


{{TODO|Wouldn’t it be entirely feasible to just use <code>//depot/...</code> and then a subfolder?}}
{{TODO|Допустимо ли использовать просто <code>//depot/...</code> а затем подпапки?}}


Then click OK.
Затем нажмите OK.


=== Submit the trunk source code ===
=== Утверждение стволового исходного кода ===


We now have a workspace filled with Valve’s base SDK code, but the Perforce server is still empty. We need to get our files up there. To do that we’ll be using the main P4V interface, which should currently be in front of you.
Теперь у нас есть рабочее пространство с базовым SDK-кодом Valve, но сервер Perforce до сих пор пуст. Нам надо передать наши файлы туда. Для этого мы будем использовать интерфейс Perforce, который должен быть перед вами.


[[Image:P4 interfaceoverview.png|center|P4V interface overview]]
[[File:P4 interfaceoverview.png|center|Обзор интерфейса Perforce]]


{{tip|You can also get an overview of the interface from <code>Help > Getting Started with P4V</code>.}}
{{tip|Вы также можете прочитать про интерфейс в справке Perforce, выбрав <code>Help > Getting Started with P4V</code>.}}


# ''Workspace/depot view (left pane).'' Click on the tabs at the bottom to change between the two. Workspace is your local copy, depot is the server’s master copy.
# ''Хранилище/Рабочее пространство (левая панель).'' Щелкните на вкладке внизу чтобы переключить вид. Рабочее пространство (Workspace) - это ваша локальная копия, а хранилище (depot) - это главная копия, хранящаяся на сервере.
# ''Task tabs (right pane).'' The tabs along the bottom of this pane allow you to carry out every operation you’ll ever need to with the Perforce client. We will be using Pending, Workspaces and Branches.
# ''Вкладки задач (правая панель). Вкладки, находящиеся внизу этой панели позволяют выполнять любые операции с клиентом Perforce. Мы будем использовать вкладки Pending, Workspaces и Branches.
# ''Log.'' Errors will appear in bold text.
# ''Log (журнал).'' Ошибки выделяются жирным шрифтом.
# ''Main menu.'' Most of the options here are available elsewhere in the interface, but it’s useful to have them in one place too.
# ''Главное меню.'' Большенство опций, представленных здесь, имеют дубликаты в других местах интерфейса, но иногда бывает полезно иметь их под рукой.


Bring up the workspace view and we’ll see about uploading the source code. It’s a two-step process:
Откройте вкладку рабочих пространств (workspace) и вы сможете выгрузить исходный код. Это делается в два шага:


# Mark the files for addition. We want to add everything, so select the workspace root, right at the top, the click ‘Mark for Add’. You can find it on the main menu or on the context menu; it’s the file icon with a plus over it. There are a lot of files in the SDK, so it might take a while for the operation to complete. When it’s finished, all of the files in the workspace view will have changed appearance to reflect that they are now being version controlled.
# Отметьтьте добавляемые файлы. Нам надо добавить всё, так что выберите корень рабочего пространства, для чего щелкните правой кнопкой мыши на корне и выберите ‘Mark for Add’ (отметить для добавления); рядом с этим пунктом находится рисунок с файлом и знаком ‘+’ около него. В SDK много файлов, т.ч. понадобится много времени чтобы скопировать их все. Когда операция добавления закончится, файлы в рабочем пространстве поменяют свой вид, что означает, что они подверглись контролю версий.
# Submit the changelist. Move to the ‘Pending’ tab (the red, upwards arrow) and you’ll see that there’s an item called ‘default’ that contains all of the files you just added. Submit it with a double-click (or {{key|Ctrl+S}}). You’ll need to enter a brief description of what the changes are.
# Утвердите изменения. Откройте вкладку ‘Pending’ (направленная вверх красная стрелка) и вы увидите пункт, называемый ‘default’, который содержит все файлы, которые вы недавно добавили. Подтвердите их с помощью двойного щелчка (или нажатием {{key|Ctrl+S}}). Вам необходимо будет ввести описание изменений.


Once the process has finished, you’ll be able to browse to the newly-populated depot view. Congratulations!  
После того как вы закончите вам будет доступен просмотр нового заполненного вида хранилища. Примите поздравления!


=== Create and execute the branch ===
=== Создание и выполнение ответвления ===


The branched workspace is what you will be working from. It starts off as any other workspace, but this time you can call it after your mod and point its Root to the place where you’d like to store the files as you work on them. The View should be on its own virtual server, so use something like this:
Ответвление - это то рабочее пространство, с которым вы будете работать. Оно начинается как и любое другое рабочее пространство, но в этот раз вы можете вызвать его после вашего мода и указать ему корень того места, где вы хотите хранить файлы, над которыми вы работаете. Поле View должно быть на его собственном виртуальном сервере, так что используйте что-то вроде этого:


  //depot/mymod/... //mymod/...
  //depot/mymod/... //mymod/...


If you’ve already made some changes that you want to keep, and don’t want to change folders, move your existing code somewhere else until the branch operating is complete. You can’t properly create a workspace in a folder that’s already populated.
Если вы уже сделали какие-то изменения, которые вы желаете сохранить, и вы не желаете менять папки, то переместите ваш код куда-нибудь ещё до тех пор пока операция создания ответвления не закончена. Нельзя правильно создать рабочее пространство в папке, которая уже заполнена.


Choose <code>File > New > Branch Specification...</code> and you’ll create a new branch. Give it a suitable name, like <code>valve_to_<mymod></code>, then configure View to read:
Выберите <code>File > New > Branch Specification...</code> и вы создадите новое ответвление. Дайте ему желаемое имя, вроде <code>valve_to_<mymod></code>, а затем задайте значение поля View:


  //depot/valvesrc/... //depot/mymod/...
  //depot/valvesrc/... //depot/mymod/...


Hit OK and it will be created: now we just need to execute it. Active to your mod’s workspace (use the drop-down list just above the left pane, which will currently read valvesrc), and with its root selected go to the Branches task tab and choose the ‘Integrate Using’ context menu option from your new branch. Either uncheck ‘Limit integration to’ option or change the View it’s using to be the ‘target’, then click Integrate.
Щелкните OK и ветвление будет создано: теперь нам необходимо лишь запустить его. Активируйте рабочее пространство вашего мода (используйте выпадающий список сверху над левой панелью, в котором сейчас выбрано valvesrc), выберите его корень, перейдите к вкладке задач ‘Branches’ и выберите пункт контекстного меню ‘Integrate Using’ вашего нового ответвления. Далее либо снимите флажок ‘Limit integration to’ либо поменяйте значение View на ‘target’. Затем щелкните Integrate.


[[Image:P4 integrate.png|center|Integrating trunk code in Perforce]]
[[File:P4 integrate.png|center|Интегрирование стволового кода в Perforce]]


We have now created a branch of <code>//depot/valvesrc/</code> in the mod workspace. It still needs submitting it to the Perforce server, remember! Do it in the same way as we did the trunk code earlier.
Мы создали ответвление <code>//depot/valvesrc/</code> в рабочем пространстве кода. Не забудте чго всё ещё нужно утвердить на сервере Perforce. Сделайте это также как мы делали это для стволового кода ранее.


=== Check out ===
=== Проверка (Check Out) ===


This is a complication that is only useful when you’re working with a team of programmers. Unfortunately you’re going to have to put up with it even if you’re alone! The logic is this: all version-controlled files on your computer are read-only unless you have them ‘checked out’ of the server. This stops people from unintentionally working on the same code at the same time, which usually leads to redundant work and general confusion.
Это сложность, которая будет полезна только если вы работаете с командой программистов. К сожалению вам придётся иметь с этим дело даже если вы работаете в одиночку! Логика такова: все файлы, находящиеся под контролем версий на вашем компьютере, доступны только для чтения если только они не отмечены сервером. Это предотвращает ситуации, когда несколько человек работают над одним кодом одновременно, что ведет к появлению лишней работы и общей путанице.


Luckily, it’s easy to check out. If you’re working on your own you can head up to the very top level of your mod workspace and check out the whole workspace in one go. You perform the command from the main menu (left of Add, with a tick), from the context menu, or with {{key|Ctrl+E}}.
К счастью проверка (Check Out) проводится очень просто. Если вы работаете в одиночку, то вы можете выбрать самый верхний уровень рабочего пространства вашего мода и проверить сразу всё рабочее пространство. Вы можете выбрать эту команду из контекстного меню или воспользоваться сочитанием клавиш {{key|Ctrl+E}}.


If you’re working with a team you’ll need to agree on what code you each check out, or else prepare to face the consequences...
Если вы работаете в команде, то вам надо согласовывать кто над каким кодом работает или приготовиться к возможным последствиям работы над кодом без согласования...


{{warning|Resist the temptation to manually remove the read-only flag from your source files. This desynchronizes Perforce and may confuse you later on (though Perforce won’t care).}}
{{warning|Не поддавайтесь искушению снять пометку "только для чтения" с файлов кода. Это рассинхронизирует Perforce и может привести к недоумению в будущем.}}


== Using source control to integrate SDK updates ==
== Использование контроля кода для интеграции обновлений SDK ==


We’ve now got source control up and running for your mod. It might have seemed complex, but this stuff will soon become grist for the mill. You can use source control as an ongoing backup, to compare code with what came before or after it, to revert changes, share code with others and contribute collaboratively, and, of course, to integrate trunk updates, which is what we'll be doing in this section.
We’ve now got source control up and running for your mod. It might have seemed complex, but this stuff will soon become grist for the mill. You can use source control as an ongoing backup, to compare code with what came before or after it, to revert changes, share code with others and contribute collaboratively, and, of course, to integrate trunk updates, which is what we'll be doing in this section.
Line 127: Line 128:
The 'trunk' contains Valve’s unmodified SDK code, which now needs updating too. Before you open the SDK Launcher and install the new release however, remember that you need to check out the files to make them writeable. Just go to the workspace’s root and hit {{key|Ctrl+E}}.
The 'trunk' contains Valve’s unmodified SDK code, which now needs updating too. Before you open the SDK Launcher and install the new release however, remember that you need to check out the files to make them writeable. Just go to the workspace’s root and hit {{key|Ctrl+E}}.


Now you can [[Create a Mod|install the new code]]; use the wizard's ‘Source code only’ option. After the installation mark all files in the valvesrc workspace for add to pick up anything new, then revert all unchanged files. Deleted files will have to be removed manually (if you think you’ve still got some lying around, search the valvesrc/ folder for files older than those from the SDK launcher install you just performed). Once that’s done submit, and we can move on to the fun part.
Now you can {{L|Create a Mod|install the new code}}; use the wizard's ‘Source code only’ option. After the installation mark all files in the valvesrc workspace for add to pick up anything new, then revert all unchanged files. Deleted files will have to be removed manually (if you think you’ve still got some lying around, search the valvesrc/ folder for files older than those from the SDK launcher install you just performed). Once that’s done submit, and we can move on to the fun part.


=== Integrate ===
=== Integrate ===
Line 161: Line 162:
== See also ==
== See also ==


* [http://www.perforce.com/perforce/technical.html Official Perforce documentation]
* [https://www.perforce.com/perforce/technical.html Official Perforce documentation]
* [http://public.perforce.com/public/perforce/faq/beginner.html Perforce Beginner's FAQ]
* [https://public.perforce.com/public/perforce/faq/beginner.html Perforce Beginner's FAQ]
* [http://www.perforce.com/perforce/technotes/note064.html Integrating Perforce with Visual Studio]
* [https://www.perforce.com/perforce/technotes/note064.html Integrating Perforce with Visual Studio]
 


[[Category:Programming]]
{{ACategory|Programming}}
[[Category:Tutorials]]
{{ACategory|Tutorials}}

Latest revision as of 04:08, 22 August 2024

English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)
Info content.png
This page needs to be translated.
This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article complies with the alternate languages guide.(en)

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

В этой статье обсуждается ситема Perforce, которая используется компанией Valve. Эта система бесплатна, если кол-во её пользователей не превышает двух человек. Команды, содержащие большее кол-во человек, могут использовать полностью бесплатные альтернативные продукты, вроде Subversion, но и для них эта статья окажется полезной: все системы контроля версий работают примерно одним и тем же образом. Для пользователей Subversion доступно отдельное руководство(en).

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

Прежде чем мы начнём

Если вы уже начали программировать без контроля исходного кода, то ОСТАНОВИТЕСЬ!. Контроль исходного кода необходимо начать использовать как можно раньше, поскольку после того как выходит новое обновление для Steam старые версии SDK-кода становятся недоступными.

Если вы хотите применить недавно вышедшее обновление SDK с помощью Perforce к вашему "неконтролируемому" коду, то уже слишком поздно и вам придётся вносить изменения трудным способом. Такие утилиты как Beyond Compare могут облегчить этот процесс, а если после внесения изменений вы последуете рекомендациям, изложенным в этой статье, то это будет последний раз, когда вам придётся это делать.

Где достать Perforce

Прежде всего вам необходимо где-то загрузить Perforce. Загрузите первые два пакета с этой страницы:

  • Perforce Server Windows Installer
  • P4V Installer

Не загружайте ‘P4Win Installer’ - это устаревшее приложение. Избегайте собственноручной найстройки сетевых параметров во время установки, если только вы действительно не планируете подключаться через локальную сеть или интернет.

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

Tip.pngСовет:Если вы сделали ошибку и хотите перезапустить базу данных Perforce, то запустите это из командной строки: p4 obliterate –y //depot/.... НЕ делайте этого с базой данных, которая уже установленна и работает!

sv

Обзор

Теперь установим свежую копию SDK-кода, с помощью мастера создания модификаций(en) и передадим его в Perforce, который его подцепит. Затем мы создадим ‘ветвление’ (дубликат) этого подчиненного кода в другом каталоге.

С помощью этого ответвленного кода вы будете создавать свою модификацию, изредка обновляя копию, подцепленную Perforce'ом, если вам надо будет сделать резервную копию. Первый экземпляр кода будет оставаться в неприкосновенности до тех пор, пока не выйдет обновление SDK-кода; тогда вы установите это обновление в него прежде чем интегрировать его в ваш ответвленный код. Так как Perforce знает какие файлы изменены, он будет отличным помощником в этом процессе.

Настройка контроля исходного кода

SDK-код Valve станет ‘стволом’ вашей кодовой базы, от которого будет ‘ветвиться’ код вашего мода. Создайте его с помощью мастера создания мода(en). Ваша пользовательская папка будет неплохим местом для его хранения, особенно если вы используете Windows Vista, но поместите его в подпапку, созданную специально для SDK-кода - другая папка, содержащая код вашего мода, будет создана позже.

Tip.pngСовет:Так как вы не будете производить много изменений над вашим стволовым кодом, неплохой идеей станет его архивация. Вы можете использовать окно задания свойств папки чтобы отключить индексацию и включить архивацию. Или еще лучше заархивируйте эту папку в один архив после того как закончите читать это руководство.

Создание рабочего пространства

Теперь начнём работу с Perforce. Запустите P4V - графический клиент. Вас будет приветствовать диалог “Open Connection”.

Диалог “Open Connection” программы Perforce

Если вы не хотите подключаться через сеть, то можете проигнорировать все опции этого диалога, кроме опции 3, которая определяет к какому рабочему пространству вы присоединитесь. Нажмите кнопку ‘new’ справа и назовите рабочее пространство, например, valvesrc.

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

Названия большенства полей диалога рабочего пространства говорят сами за себя, и вам необходимо обратить внимание только на два из них: Root и View. Параметр Root должен указывать на папку, в которую вы только что установили немодифицированный SDK-код, тогда как View указывает на локацию, в которой код будет храниться на сервере Perforce (‘depot’).

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

Для наших целей необходимо одно независимое. Используйте следующее значение параметра View:

//depot/valvesrc/... //valvesrc/...
Нужно сделать: Допустимо ли использовать просто //depot/... а затем подпапки?

Затем нажмите OK.

Утверждение стволового исходного кода

Теперь у нас есть рабочее пространство с базовым SDK-кодом Valve, но сервер Perforce до сих пор пуст. Нам надо передать наши файлы туда. Для этого мы будем использовать интерфейс Perforce, который должен быть перед вами.

Обзор интерфейса Perforce
Tip.pngСовет:Вы также можете прочитать про интерфейс в справке Perforce, выбрав Help > Getting Started with P4V.
  1. Хранилище/Рабочее пространство (левая панель). Щелкните на вкладке внизу чтобы переключить вид. Рабочее пространство (Workspace) - это ваша локальная копия, а хранилище (depot) - это главная копия, хранящаяся на сервере.
  2. Вкладки задач (правая панель). Вкладки, находящиеся внизу этой панели позволяют выполнять любые операции с клиентом Perforce. Мы будем использовать вкладки Pending, Workspaces и Branches.
  3. Log (журнал). Ошибки выделяются жирным шрифтом.
  4. Главное меню. Большенство опций, представленных здесь, имеют дубликаты в других местах интерфейса, но иногда бывает полезно иметь их под рукой.

Откройте вкладку рабочих пространств (workspace) и вы сможете выгрузить исходный код. Это делается в два шага:

  1. Отметьтьте добавляемые файлы. Нам надо добавить всё, так что выберите корень рабочего пространства, для чего щелкните правой кнопкой мыши на корне и выберите ‘Mark for Add’ (отметить для добавления); рядом с этим пунктом находится рисунок с файлом и знаком ‘+’ около него. В SDK много файлов, т.ч. понадобится много времени чтобы скопировать их все. Когда операция добавления закончится, файлы в рабочем пространстве поменяют свой вид, что означает, что они подверглись контролю версий.
  2. Утвердите изменения. Откройте вкладку ‘Pending’ (направленная вверх красная стрелка) и вы увидите пункт, называемый ‘default’, который содержит все файлы, которые вы недавно добавили. Подтвердите их с помощью двойного щелчка (или нажатием Ctrl+S). Вам необходимо будет ввести описание изменений.

После того как вы закончите вам будет доступен просмотр нового заполненного вида хранилища. Примите поздравления!

Создание и выполнение ответвления

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

//depot/mymod/... //mymod/...

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

Выберите File > New > Branch Specification... и вы создадите новое ответвление. Дайте ему желаемое имя, вроде valve_to_<mymod>, а затем задайте значение поля View:

//depot/valvesrc/... //depot/mymod/...

Щелкните OK и ветвление будет создано: теперь нам необходимо лишь запустить его. Активируйте рабочее пространство вашего мода (используйте выпадающий список сверху над левой панелью, в котором сейчас выбрано valvesrc), выберите его корень, перейдите к вкладке задач ‘Branches’ и выберите пункт контекстного меню ‘Integrate Using’ вашего нового ответвления. Далее либо снимите флажок ‘Limit integration to’ либо поменяйте значение View на ‘target’. Затем щелкните Integrate.

Интегрирование стволового кода в Perforce

Мы создали ответвление //depot/valvesrc/ в рабочем пространстве кода. Не забудте чго всё ещё нужно утвердить на сервере Perforce. Сделайте это также как мы делали это для стволового кода ранее.

Проверка (Check Out)

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

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

Если вы работаете в команде, то вам надо согласовывать кто над каким кодом работает или приготовиться к возможным последствиям работы над кодом без согласования...

Warning.pngПредупреждение:Не поддавайтесь искушению снять пометку "только для чтения" с файлов кода. Это рассинхронизирует Perforce и может привести к недоумению в будущем.

Использование контроля кода для интеграции обновлений SDK

We’ve now got source control up and running for your mod. It might have seemed complex, but this stuff will soon become grist for the mill. You can use source control as an ongoing backup, to compare code with what came before or after it, to revert changes, share code with others and contribute collaboratively, and, of course, to integrate trunk updates, which is what we'll be doing in this section.

Submit pending branch changes

This process only changes from our previous submits in that you will need to add any new files created since them to the depot. If you know precisely what's been created you can find each file manually and mark them for addition, but if you’ve got loads or aren’t sure (both will be the case if you’re importing the existing code you moved out earlier back into the workspace) it’s best to add the whole workspace.

You’ll need to do two extra things if you add the entire workspace:

  1. Right-click on the new pending changelist and select the “Revert Unchanged Files” option, for obvious reasons.
  2. Find and revert bin/, release_hl2/ and debug_hl2/ folders from game/server/ and game/client/, then do the same for any .ncb files (you can use Ctrl+F). These all contain very large amounts of auto-generated binary data that you don’t need or want version controlled. If you accidentally do submit any of these files, you can delete them from the database with a few console commands (these given without the confirming -y switch):
    • p4 obliterate //....ncb
    • p4 obliterate //depot/mymod/server/<folders>

Submit the changelist and we’ll move on.

Submit trunk update

The 'trunk' contains Valve’s unmodified SDK code, which now needs updating too. Before you open the SDK Launcher and install the new release however, remember that you need to check out the files to make them writeable. Just go to the workspace’s root and hit Ctrl+E.

Now you can install the new code(en); use the wizard's ‘Source code only’ option. After the installation mark all files in the valvesrc workspace for add to pick up anything new, then revert all unchanged files. Deleted files will have to be removed manually (if you think you’ve still got some lying around, search the valvesrc/ folder for files older than those from the SDK launcher install you just performed). Once that’s done submit, and we can move on to the fun part.

Integrate

We’ve now got fully updated code in both depots, so it’s time to integrate. You do this in the same manner as you populated the branch workspace: go to its root, then integrate with your valve_to_mymod branch.

The difference here is that you’ll need to resolve files that have changed between the versions. Since Perforce knows the point at which your mod code branched it can make a very good guess as to what version of a file should take precedence in most cases. You’ll usually only have to manually inspect the differences if you’ve made extensive changes to something, or if there’s a conflict that can’t be resolved automatically.

Otherwise you can accept the automatic result. Remember that you can always revert to the earlier, unmerged version of a file if the process later turns out to have gone wrong.

Tip.pngСовет:If Perforce queries a .lib file, always accept Valve's.

Manual merges

Нужно сделать: Link to documentation on P4's merge tool.

Test the new code

At this point, you should do a pass of the code to fix any compile errors that may have been introduced by the code merge. You could also do this pass before submitting the merged code changelist, but it tends to be easier to make changes starting with an empty changelist rather than one full of code merges.

And you're done!

Conclusion

Working with a source control introduces some concepts that take getting used to, but it pays dividends. It saves time, helps teams work together on the same product, and provides access to the whole history of a project.

Keep in mind that, while this document has a lot of steps, this stuff is all trivial once you're familiar with Perforce. Once you know how this all works, all these integrations and merges can be done in a matter of minutes. We recommend that you jump back to the "overview" section of this document to review the high-level process that is involved, and see how all the detailed steps fit into that simple high-level process.

Internally, Valve uses source control in a similar fashion to that described in this document. The main difference is that ALL files for Valve games go in Perforce, including content source .TGA artwork, .VMT files, executables, scripts, documents, etc. We recommend doing this while developing a mod as well, bandwidth limits and disc space allowing, because you can instantly restore any version of the mod that ever existed.

Valve also uses a multitude of codelines (whereas there are just two in this document). For example, we have a main codeline that about 20 programmers submit code into. Often programmers need to stay sheltered from other people's changes (which may happen as many as 19 times per day!), so each programmer has their own set of personal codelines that are branched off the main codeline. This way, they can choose when they want to integrate all the changes from other programmers into their personal codeline (just like you now have the choice about when you want to integrate Valve's source code into your mod's source code).

See also