git checkout 同时在后台运行另一个程序

use*_*184 2 git

我只是有一个关于使用的愚蠢问题git

假设我正在运行current_branch,并且运行时间很长program A,这将不断生成一些日志文件并保存到我的current_branch.

此运行大约需要 5 小时。运行期间,我可以切换到另一个分支(我们称之为new_branch)并完成我的工作吗?

我的问题是,如果我在运行中间切换到 ,那么在program A上运行的生成的文件会发生什么情况?current_branchnew_branch

Sch*_*ern 5

我的问题是,如果我在运行过程中切换到 new_branch,那么在 current_branch 上运行的程序 A 生成的文件会发生什么情况?

这里没有魔法。如果您切换到新分支,工作目录中已更改的文件将会更改,并且您的程序将与这些新文件一起继续。Git 将忽略任何被忽略的文件,例如临时文件、日志文件等。接下来发生的情况取决于您的程序和操作系统。

您的程序已加载的任何代码都将保持加载状态。对于许多程序来说这已经足够了,但是有些系统会根据需要动态加载文件,并且它们可能不会全部加载。其他人可能会检测到底层文件已更改并重新加载其代码。再说一次,没有魔法。如果您的程序在切换分支后打开签入的文件,它将获得该文件的新版本。

在 Unix 操作系统上,如果移动或删除文件,则任何打开的文件句柄将保持打开状态。这意味着,例如,如果您的程序有一个日志文件的打开文件句柄,并且该日志文件被删除或移动,它将继续写入该文件。这是一种保护临时文件的技术,创建临时文件,打开它进行读写,删除文件(实际上只是指向实际数据的指针),并保持文件句柄打开。一旦程序退出并且所有文件句柄关闭,数据将被清除。但是,您不太可能将日志文件签入 Git。

Windows 可以强制文件锁定。这意味着如果您打开一个文件的文件句柄并尝试移动或删除它,您将不被允许这样做。因此,如果您使用的是 Windows,这意味着您可能无法查看新分支。


最简单、最安全的事情就是不要冒险。在新目录中创建一个新的克隆,以便在长时间运行的进程运行时进行开发。如果它很大,您可以克隆现有的存储库,而不是通过网络拉取它。以与您完全相同的方式工作。当漫长的过程完成后,您可以将此临时存储库设置为远程存储库并从中提取更改,或者采取简单的权宜之计,删除旧存储库并将新存储库移至其位置。Git 存储库只是目录,可以自由移动。

将来,不要在开发结帐时运行真正的代码。相反,创建一个新的克隆并在其中执行长时间运行的进程。无论是在另一个目录中还是在专用的工作服务器中都取决于您。