一些公司使用隔离网络甚至完全没有网络作为安全措施来防止未经授权的访问。在这些系统上工作可能会很困难,但使用适当的版本控制工具(例如 Git)仍然是可能的,甚至可能更重要。
按照设计,Git 可以在没有远程存储库的情况下正常工作。您可以像平常一样分支、暂存和提交文件。
代码语言:javascript复制mkdir testRepo
cd testRepo
git init
touch test.txt
git add --all
git commit -m "Initial Commit"
如果仅使用一台机器进行开发,这非常有效,但情况通常并非如此。
使用多台机器 — 使用 USB 记忆棒/HDD
当安全策略允许对记忆棒或便携式硬盘驱动器进行读/写访问时,可以在此设备上创建远程存储库。
在一台开发机器上安装记忆棒。
代码语言:javascript复制cd /path/to/memory/stick
mkdir repoName.git
cd repoName.git
git init --bare
导航到要共享的存储库,将远程存储库添加到记忆棒上,然后推送更改。
代码语言:javascript复制cd /path/to/local/repo/
git remote add origin /path/to/memory/stick/repoName.git
git push origin master
注意。遥控器可以叫任何东西。它不必被称为“起源”。
卸下记忆棒并将其安装到另一台开发机器上。
如果开发计算机上还没有存储库的副本,则可以使用 git clone。
代码语言:javascript复制git clone /path/to/memory/stick/repoName.git
如果计算机上已有存储库的副本,则将记忆棒添加为遥控器并获取/拉取更改。
代码语言:javascript复制cd /path/to/local/repo/
git remote add origin /path/to/memory/stick/repoName.git
git pull origin
从现在开始,像平常一样使用 Git,但请确保每当执行 git pull、fetch 或 push 时,都会将记忆棒安装在计算机上。
确保记忆棒是您备份例程的一部分。
使用多台机器 — 使用 CD/DVD
在锁定的开发环境中,内存条可能会被阻止。使用Git还是可以的,但是稍微有点不方便。
Git 会很乐意将更改从本地存储库的一个副本获取到另一个副本。一种选择是通过 CD 或其他介质将包含本地 Git 存储库的目录简单地复制到另一台计算机,然后像平常一样在两台计算机上进行更改和提交。当您想要合并更改时,请选择一台计算机来执行合并并将其他存储库复制到该计算机。要将所有更改拉入当前分支,请使用:
代码语言:javascript复制git pull /path/to/other/repo
或者,您可以获取更改并创建一个新分支来存储它们:
代码语言:javascript复制git fetch /path/to/other/repo
git checkout -b new_branch FETCH_HEAD
此时,创建一个完成合并的存储库的新副本,并将其移至其他计算机。将最新更改拉入其他存储库,或者如果需要,只需用新副本替换整个存储库。
显然这远非最佳。复制整个存储库目录将包括 .gitignore 文件中排除的个人设置和文件。为了缓解这种情况,可以使用 Git 克隆来复制存储库,而不仅仅是复制它,但更好的选择是使用 git bundle。
Git 捆绑包
git 捆绑包允许将存储库的部分或全部压缩为 git 能够克隆和获取的格式的单个文件。
工作流程与以前非常相似,但不是复制整个存储库目录,而是创建 git 包。在第一台机器上使用以下命令创建捆绑包:
代码语言:javascript复制git bundle create repoName.bundle --all
选项捆绑整个存储库,包括所有分支和标签。可以使用 或 选择特定分支或标签。
将 repoName.bundle 文件复制到另一台计算机。要克隆存储库,只需使用:
代码语言:javascript复制git clone repoName.bundle
可以在任何计算机上进行更改和提交,然后像之前一样必须选择一台计算机来执行合并。在非合并计算机上,确保提交所有更改并使用以下命令创建捆绑包:
代码语言:javascript复制git bundle create repoName.bundle --all
对于较大的存储库,最好仅捆绑存储库的一部分,以避免传输超出所需的数据。例如,仅包含 master 分支上的最后 5 次提交,请使用:
代码语言:javascript复制git bundle create repoName.bundle -5 master
重要的是,捆绑包中的提交与存储库上的提交之间没有间隙,在该间隙中将发生合并,否则该过程将失败。
将捆绑包复制到将发生合并的计算机,并使用以下命令提取更改:
代码语言:javascript复制git pull /path/to/repoName.bundle
合并/变基完成后,使用以下命令创建另一个包:
代码语言:javascript复制git bundle create repoName.bundle --all
上面的命令可以替换为所需的存储库/提交子集。
将捆绑文件移动到其他计算机并使用以下命令更新那里的更改:
代码语言:javascript复制git pull /path/to/repoName.bundle
创建本地远程存储库
捆绑包解决了在没有网络的情况下同步 Git 存储库的问题,但我们仍然面临多台计算机彼此之间可能略有不同步的情况。如果新开发人员加入团队,他们会从谁那里复制存储库?最好的选择是选择一台开发机器作为“服务器”。除了开发人员实际工作的存储库的本地克隆之外,还可以在此开发计算机上创建一个裸 Git 存储库。
代码语言:javascript复制cd /path/to/store/main/repo
mkdir remoteRepoName.git
cd remoteRepoName.git
git init --bare
接下来导航到本地 git 存储库或创建一个新的存储库并将remoteRepoName.git 存储库添加为远程存储库。
代码语言:javascript复制cd /path/to/local/repo/
git remote add origin /path/to/store/main/repo/remoteRepoName.git
git push origin branchName
然后可以在本地存储库中进行更改,或者从其他开发计算机上创建的捆绑包中进行更改。每当进行更改时,都可以使用以下命令将其推送到远程:
代码语言:javascript复制git push origin branchName