对工程使用源代码管理
您可以使用工程处理源代码管理下的文件。源代码管理将文件存储在存储库中,允许您签出存储库中的文件以进行处理,并返回存储库中以保留更改,还允许您查看已签入的不同文件版本的历史记录。有关在 MathWorks 产品中使用源代码管理的详细信息,请参阅MATLAB 中的源代码管理集成。
工程集成了两个源代码管理系统,即 Git™ 和 Subversion® (SVN)。
要使用源代码管理设置工程,请使用以下任一工作流:
从现有存储库中创建新工程。
将现有工程添加到源代码管理中。
在已在源代码管理下的文件夹中创建新工程。
为新工程或现有工程创建一个新 GitHub® 存储库。
然后,当您的工程在源代码管理下时,您可以从 MATLAB® 内执行操作,例如签入和签出文件、运行检查以及提交和还原更改。
在 MATLAB Online™ 中,不支持 Subversion 集成。
设置源代码管理
可以通过四种方法来使用源代码管理设置工程。
从现有存储库中创建新工程
通过从源代码管理检索文件来从现有存储库创建工程的本地新副本。您可以克隆一个 Git 存储库,或者从 SVN 存储库中签出文件,或者使用其他源代码管理集成。
要从现有存储库中创建新工程,请执行以下操作:
在主页选项卡上,点击新建 > 工程 > 从 Git 或新建 > 工程 > 从 SVN。将打开“从源代码管理新建工程”对话框。
如果您知道存储库位置,请将其粘贴到存储库路径字段中。
否则,要浏览并验证从中检索文件的存储库路径,请点击更改。
在对话框中,通过在字段中输入或粘贴 URL、从最近使用的存储库列表中选择或点击 按钮,指定存储库 URL。
点击验证以检查存储库路径。如果路径无效,请对照您的源代码管理存储库浏览器检查 URL。
如果您看到存储库的身份验证对话框,请输入登录信息以继续。
如有必要,请选择存储库树中较深的文件夹。在 SVN 中,您可能希望从
trunk
或tags
下的分支文件夹中签出。当您完成指定希望检索的 URL 路径后,请点击确定。对话框关闭,您会返回到“从源代码管理新建工程”对话框。
在沙盒字段中,选择工作文件夹,以将检索到的用于新工程的文件放入该文件夹中。在 SVN 中,使用本地文件夹可以获得最佳效果,因为使用网络文件夹速度较慢。
点击检索。
如果存储库已包含工程,则当工具完成将文件检索到所选沙盒文件夹时,该工程即准备就绪。
如果沙盒中尚未包含工程,则会出现对话框询问您是否在文件夹中创建工程。要创建工程,请指定工程名称,然后点击确定。将出现欢迎屏幕,帮助您设置新工程。有关设置工程的详细信息,请参阅设置工程。
如果您在克隆大型 Git 存储库时遇到 OutOfMemoryError: Java heap space
之类的错误,请编辑您的 MATLAB 预设项以增加堆大小。
在主页选项卡的环境部分,点击预设项。
选择 MATLAB > 常规 > Java 堆内存。
移动滑块以增加堆大小,然后点击确定。
重新启动 MATLAB。
将现有工程添加到源代码管理
如果您有现有工程,可以将其添加到 Git 或 SVN 源代码管理中。
要将工程添加到源代码管理,请执行以下操作:
在工程选项卡上的源代码管理部分中,点击使用源代码管理。将打开“源代码管理信息”对话框。
点击将工程添加到源代码管理按钮。将打开“添加到源代码管理”对话框。
在源代码管理工具列表中,为您的存储库选择合适的工具。如果您选择 Git,则跳过步骤 4,直接进入步骤 5。
如果您使用 SVN 远程存储库指定现有存储库,请点击 按钮以浏览到您的存储库,将 URL 粘贴到字段中,或者使用列表选择最近的存储库。
点击验证以检查所选存储库的路径,然后点击确定。
点击转换以完成将工程添加到源代码管理的操作。
工程将运行完整性检查。
运行完整性检查后,点击打开工程以返回工程。
工程将显示当前源代码管理工具和存储库位置的详细信息。
如果创建了新存储库,请选择文件 > 已修改视图,然后点击提交以将文件的第一个版本提交到新存储库。请根据需要在对话框中输入注释,然后点击提交。
如果要将分支与 Git 合并,您需要执行其他设置步骤。有关详细信息,请参阅设置 Git 源代码管理。
如果您要使用 SVN 的某个非内置版本,请参阅设置 SVN 源代码管理。
在已在源代码管理下的文件夹中创建新工程
如果您从已在源代码管理下的文件夹创建新工程,MATLAB 会自动将新工程添加到源代码管理中。有关从文件夹创建工程的详细信息,请参阅创建工程。
创建新的 GitHub 存储库
创建 GitHub 存储库会将 Git 源代码管理添加到您的新工程或现有工程中。您创建的 GitHub 存储库将成为工程的远程存储库。要创建 GitHub 存储库,您必须有 GitHub 帐户。
要创建空白工程和 GitHub 远程存储库,请执行以下操作:
在主页选项卡上,点击新建 > 工程 > 从 Git。
选择新建 > GitHub 存储库。在 GitHub 对话框中,输入您的用户名和个人访问令牌。填写存储库名称和说明字段,然后点击创建。
MATLAB 创建一个新的公共 GitHub 存储库,并用 https://github.com/myusername/mynewrepository 格式的信息填充存储库路径字段。
在沙盒字段中,指定沙盒的位置。所选文件夹必须为空。点击检索以创建沙盒。
要确认工程名称并创建工程,请点击确定。
在创建 GitHub 存储库和沙盒后,将文件添加到沙盒中。将文件的第一个版本提交到本地存储库中,然后将所有修改推送到远程 GitHub 存储库中。有关详细信息,请参阅Use Git in MATLAB。
提示
如果您要为现有工程创建远程 GitHub 存储库,请将您的工程共享到 GitHub。
加载工程后,在工程选项卡上,选择共享 > GitHub。有关详细说明,请参阅共享工程中的“在 GitHub 上发布”。
执行源代码管理操作
检索版本和签出工程文件
下表显示如何检查修改的工程文件、更新修订版、获取和管理文件锁以及为工程文件加标签。
操作 | 过程 |
---|---|
刷新工程文件的状态。 | 要检查本地修改的文件,请在工程选项卡上的源代码管理部分中,点击刷新。刷新会查询本地沙盒状态,并检查使用 MATLAB 之外的其他工具所做的更改。 有关详细信息,请参阅 更新 SVN 文件状态和修订版本 或 Use Git in MATLAB。 |
检查工程文件中的修改。 | 要了解存储库中是否有工程的新版本,请在文件视图中,右键点击该文件并选择源代码管理 > 检查修改。 在 SVN 中,此选项会联系存储库以检查外部修改。工程会比较本地文件和存储库版本的修订版编号。如果存储库中的修订版编号大于本地沙盒文件夹中的修订版编号,则工程会在本地文件的修订版编号旁边显示 (非最新)。 |
更新所有工程文件。 | 使用 SVN 时,要获取所有工程文件的最新更改,请转至工程选项卡,在源代码管理部分中,点击更新。工程会显示一个对话框,其中列出在磁盘上发生了更改的所有文件。您可以使用工程预设项显示关于源代码管理更新的更改来控制此行为。有关详细信息,请参阅更新 SVN 文件状态和修订版本。 使用 Git 时,要从源代码管理存储库中获取所有工程文件的最新更改并将其合并到当前分支中,请转至工程选项卡,在源代码管理部分中,点击取回。要手动获取更改并进行合并,请在工程选项卡上的源代码管理部分中,点击提取。此操作将更新本地存储库中的所有原分支。当您点击提取时,沙盒文件不会更改。要查看来自其他人的更改,请将原始更改合并到本地分支。有关详细信息,请参阅Use Git in MATLAB。 |
更新选定工程文件的修订版。 | 要更新选定的一组文件,请在文件视图中,右键点击这些文件,然后为您使用的源代码管理系统选择源代码管理 > 更新命令。例如,如果您使用 SVN,请选择源代码管理 > 从 SVN 更新,以从存储库中获取所选文件的最新本地副本。 |
清除 SVN 登录信息。 | 要清除任何存储的登录凭据,请在工程选项卡的源代码管理部分中,点击清除登录。 |
获取 SVN 文件锁。 | 要获取 SVN 文件锁,请在文件视图中,选择要签出的文件。右键点击选定的文件,然后选择源代码管理 > 获取文件锁。SVN 源代码管理列中将出现一个锁符号。其他用户在其沙盒中看不到锁符号,但当您拥有锁时,他们无法获取文件锁,也无法签入更改内容。要查看或打开锁,请在工程选项卡上,点击锁。 获取文件锁仅适用于 SVN。Git 没有锁。 |
管理 SVN 存储库锁。 | 要管理存储库的全局 SVN 锁,请在工程选项卡上的源代码管理部分中,点击锁。有关详细信息,请参阅获取 SVN 文件锁。 |
对工程文件的版本加标签。 | 要标识所有工程文件的特定版本,请在工程选项卡上的源代码管理部分中,点击添加标签。指定标签文本并点击确定。标签会被添加到每个工程文件。如果您的存储库中没有 |
查看工程文件中的更改
您可以使用文件 > 已修改视图查看工程文件中的更改。下表显示如何查看修改后的工程文件列表、查看文件的历史记录以及比较两个文件的修订版。
操作 | 过程 |
---|---|
查看修改后的工程文件。 | 在文件视图中,选择已修改(文件数) 选项卡。仅当在工程中使用源代码管理时,文件 > 已修改视图才可见。 提示 使用列表布局查看文件,而无需展开文件夹。 您可以使用源代码管理摘要状态来标识已修改或发生冲突的文件夹内容。在文件视图中,文件夹显示汇总的源代码管理状态。这更便于定位文件中的更改,尤其是冲突文件。您可以将鼠标悬停在文件夹的源代码管理状态(例如,Git 或 SVN 列)上,以查看工具提示,其中显示有多少文件被修改、添加、删除和发生冲突。 |
更新修改的文件列表。 | 要更新修改的文件列表,请在工程选项卡上的源代码管理部分中,点击刷新。 |
查看修订历史记录。 | 在文件视图中,右键点击文件,然后选择源代码管理 > 显示修订版。 要浏览和比较提交的 SVN 更改集中的文件,请在工程选项卡上的源代码管理部分中,选择显示日志。在“文件修订版”对话框中,选择一个修订版以查看修改文件的列表。右键点击下方列表中的文件以查看更改或保存修订版。 |
对修订版进行比较。 | 在文件视图中,右键点击一个文件,然后选择比较 > 与前代比较,以与本地存储库 (Git) 或沙盒中的上一个签出版本 (SVN) 进行比较。“比较工具”会显示一份报告。 要比较文件的其他修订版,请选择比较 > 与修订版比较。 要查看比较报告,请选择要比较的修订版,然后点击与选定项比较。或者,选择一个修订版并点击与本地文件比较。有关详细信息,请参阅 比较文件和文件夹以及合并文件。 |
工程定义文件. resources/project
文件夹中的文件是首次创建或更改工程时生成的工程定义文件。工程定义文件使您能够将工程元数据添加到文件中,而无需将其签出。您可以通过这种方式更改的一些元数据示例包括快捷方式、标签和工程说明。工程定义文件还指定添加到工程中的文件。这些文件不是工程的一部分。
您对工程所做的任何更改都会在 resources/project
文件夹中产生更改。这些 XML 文件存储工程定义,格式可能发生更改。
您不需要直接查看工程定义文件,除非源代码管理工具需要合并。显示这些文件是为了让您了解要提交到源代码管理系统的所有文件。
从 R2020b 开始,默认工程定义文件类型是使用多个工程文件(固定路径长度)。要基于创建工程时所选择的类型更改工程定义文件管理,请使用 matlab.project.convertDefinitionFiles
。matlab.project.convertDefinitionFiles
会保留您工程的源代码管理历史记录。
警告
为避免出现合并问题,请不要多次转换工程的定义文件类型。
对于 R2020b 之前的版本,如果要基于创建工程时所选择的类型更改工程定义文件管理,请执行下列步骤:
要停止使用工程管理文件夹并删除 resources/project
文件夹,请参阅 matlab.project.deleteProject
。
运行工程检查
要对工程运行检查,请在工程选项卡上,点击向下箭头以展开工具库。在工程检查下,点击检查工程。工程会检查工程完整性方面的问题,例如缺失文件、未保存的文件或未进行源代码管理的文件。将出现一个报告结果的对话框。您可以点击以查看详细信息,并按照提示修复问题。
如果要检查所需的文件,请点击依存关系分析器,以分析修改的文件的依存关系。使用依存关系工具来分析工程的结构。
有关检查可以修复的问题的详细信息,请参阅处理工程中的派生文件和分析工程依存关系。
提交修改的工程文件
查看更改并运行工程检查后,您就可以将修改后的工程文件提交到源代码管理了。下表显示如何提交修改的工程文件。
操作 | 过程 |
---|---|
将所有修改后的文件提交到源代码管理。 | 在文件视图中,选择已修改(文件数) 选项卡。在工程选项卡上的源代码管理部分中,点击提交。在对话框中输入注释,然后点击提交。如果您使用的是 Git 源代码管理,文件将提交到您的本地存储库。如果您使用的是 SVN 源代码管理,则会将更改提交到存储库。 如果由于存储库之前移动了而导致您无法提交,会显示一条消息。您必须将文件的修订版更新到最新的 HEAD 修订版,才能提交文件。如果您使用的是 Git 源代码管理,请点击取回。如果您使用的是 SVN 源代码管理,请点击更新。请在提交前解决所有冲突。 |
将选定的文件提交到源代码管理。 | 在文件视图中,选择文件,右键点击,然后选择源代码管理 > 提交。 如果提交单个文件,则存在未提交用于跟踪文件的相关工程定义文件的风险。为了避免这种情况,请提交所有修改过的文件。 |
使用 Git 推送工程文件。 | 要将本地提交发送到远程存储库,请在工程选项卡上的源代码管理部分中,点击推送。如果由于存储库已发生变化导致您无法直接推送更改内容,则会显示消息。点击提取以从远程存储库中提取所有更改。合并更改内容并解决冲突,然后您就能推送您的更改内容了。有关详细信息,请参阅Use Git in MATLAB。 |
使用 Git 推送空工程文件夹。 | 您不能向 Git 源代码管理添加空文件夹,因此您无法点击推送然后克隆空文件夹。您可以在工程中创建一个空文件夹,但如果您推送更改然后同步新沙盒,则空文件夹不会出现在新沙盒中。在这种情况下,您可以运行检查工程来为您创建空文件夹。 要将空文件夹推送到存储库以供其他用户同步,也可以在文件夹中创建一个 |
创建 Git 暂存文件。 | Git 暂存文件用于存储未提交的更改,以供日后使用。要创建暂存文件,请在工程选项卡上的源代码管理部分中,点击暂存文件。将打开“暂存文件”对话框。点击新建暂存文件以创建包含当前已修改文件的暂存文件。有关详细信息,请参阅Store Uncommitted Changes Using Git Stashes。 |
使用 Git 创建分支。 | 要创建分支,请在工程选项卡上的源代码管理部分中,点击分支。将出现“分支”对话框,您可以在其中查看、切换、创建和合并分支。 为新分支选择源。在分支浏览器图中点击一个节点,或在源文本框中输入一个唯一标识符。您可以输入标签、分支名称或 SHA1 哈希码的唯一前缀(例如 |
使用 Git 切换、比较、保存和合并分支。 | 要切换、比较、保存和合并分支,请在工程选项卡上的源代码管理部分中,点击分支。将出现“分支”对话框,您可以在其中查看、切换、创建和合并分支。有关详细信息,请参阅Git 的分支和合并。 |
解决冲突。 | 如果您和其他用户在不同的沙盒中或在不同的分支上更改了相同的文件,则当您试图提交已修改文件时会显示冲突消息。如有必要,请提取冲突标记,比较导致冲突的差异并解决冲突。如果您有几个冲突的文件,请参阅Determine Order for Resolving Conflicts Using Dependency Analyzer。 在文件 > 已修改视图中查找冲突的文件。使用源代码管理摘要状态标识冲突的文件夹内容。文件夹显示汇总的源代码管理状态。这更便于定位文件中的更改,尤其是冲突文件。您可以将鼠标悬停在文件夹的源代码管理状态上,以查看工具提示,其中显示有多少文件被修改、添加、删除和发生冲突。 提示 使用列表布局查看文件,而无需展开文件夹。 检查源代码管理状态栏(Git 或 SVN)中是否有带红色警告符号的文件,该符号指示存在冲突。右键点击存在冲突的文件,然后选择查看冲突以比较各个版本。将打开比较报告,显示冲突文件之间的差异。 当您已解决冲突并要提交您沙盒中的版本时,请右键点击文件并选择源代码管理 > 标记冲突已解决。 对于 Git,Git 窗格中的分支状态会从 MERGING 更改为 SAFE。 选择文件 > 已修改视图以检查更改。 |
还原更改
下表显示如何还原工程文件中的更改。有关还原更改的详细信息,请参阅在 SVN 源代码管理中还原更改内容 和 Use Git in MATLAB。
操作 | 过程 |
---|---|
还原本地更改。 | 要解除锁定并还原到上次沙盒更新中的版本(即您从存储库同步或检索的上一个版本),请在文件视图中,右键点击要还原的文件并选择源代码管理 > 放弃本地更改并解锁。 要在使用 Git 时放弃本地更改,请右键点击文件,然后选择源代码管理 > 还原本地更改。要删除所有本地更改,请点击 Git 窗格中的分支,然后点击还原到 HEAD。 |
将文件还原到指定修订版本 | 要将文件还原到指定的修订版,请右键点击文件并选择源代码管理 > 使用 SVN 还原或源代码管理 > 使用 Git 还原。 在“还原文件”对话框中,选择要还原到的修订版本。选择一个修订版以查看更改内容的有关信息,例如作者、日期和日志消息。点击还原。 如果您将文件还原到早期的修订版本后又进行了更改,则在解决与存储库历史记录的冲突之前,将无法提交该文件。 |
将工程还原为指定的修订版(仅 SVN 源代码管理)。 | 要将工程还原为指定的修订版,请在工程选项卡上的源代码管理部分中,点击还原工程。在“还原文件”对话框中,选择要还原到的修订版本。 列表中的每个修订版均为修改后的文件的更改集。选择一个修订版以查看更改内容的有关信息,例如作者、日期和日志消息。 选择一个修订版并且确定信息正确后,请点击还原。 |
处理工程中的派生文件
一般情况下,最好从工程中省略派生文件和临时文件,或者从源代码管理中排除它们。要检查派生文件或临时文件,请在工程选项卡上,点击向下箭头以展开工具库。在工程检查下,点击检查工程。如果您将 slprj
文件夹添加到工程中,工程检查会建议您从工程中删除该文件夹,并提供修复选项。
另一个好做法是将派生文件(如 .mex*
、slprj
文件夹、sccprj
文件夹或其他代码生成文件夹的内容)排除在源代码管理之外,因为它们可能会导致问题。例如:
如果源代码管理系统可以执行文件锁定,您可能会遇到冲突。如果
slprj
在源代码管理之下,并且您生成了代码,则slprj
下的大多数文件都会更改并变为锁定状态。由于文件权限错误,其他用户无法生成代码。slprj
文件夹也用于通过代码生成进行仿真,因此锁定这些文件会对团队产生影响。二进制文件也会出现同样的问题,例如.mex*
。经常需要删除
slprj
。但是,如果文件夹在某些源代码管理工具(例如 SVN)下,删除slprj
可能会导致问题,例如发生“不是工作副本”错误。如果您要将生成的代码作为过程产生的工件签入,通常可将一些文件从
slprj
缓存文件夹复制到工程中的一个单独位置。这样,您可以在需要时删除临时缓存文件夹。请使用packNGo
(MATLAB Coder) 函数列出生成的代码文件,并使用工程 API 将它们与适当的元数据一起添加到工程中。slprj
文件夹可能包含许多小文件。当检查所有这些文件是否为最新时,这可能会影响某些源代码管理工具的性能。
查找具有未保存更改的工程文件
您可以检查工程中是否有未保存更改的文件。在工程选项卡上,点击向下箭头以展开工具库。在工程检查下,点击显示未保存的更改。
在“未保存的更改”对话框中,您可以看到包含未保存更改的工程文件。工程仅检测在 MATLAB 和 Simulink® 编辑器中编辑的未保存的更改。手动检查在其他工具中编辑的更改。如果有引用的工程,文件将按工程分组。您可以保存或放弃所有检测到的更改。
关闭工程时管理打开的文件
关闭工程时,如果有未保存更改的文件,将显示一条消息提示您保存或放弃更改。您可以看到所有包含未保存更改的文件,如果有引用的工程,这些包含未保存更改的文件将按工程分组。为了避免丢失工作,您可以按文件或按工程保存或放弃更改,也可以全部保存或放弃更改。
要控制此行为,请在主页选项卡的环境部分中,点击 预设。转至 MATLAB > 工程,在工程关闭部分中,选中或清除标签为检查打开的工程模型,只要不是脏模型就关闭它们的复选框。