离线使用 git

为了防止外部入侵,一些公司不使用网络或者使用封闭的网络。在这种环境下工作可能会有些困难,但你仍然可以使用类似Git这样的版本控制工具,这也许更加重要。

Git是个很灵活的工具,你不需要远程仓库就可以使用它。你可以像平时一样创建分支,暂存和提交文件。

举个例子,假设你只有一台电脑用于开发,你可以创建一个名为testRepo的文件夹,然后在其中初始化一个Git仓库,创建一个test.txt文件,将其添加到仓库,并提交:

mkdir testRepo
cd testRepo
git init
touch test.txt
git add --all
git commit -m "Initial Commit"

不过,开发工作往往不只在一台电脑上进行。

如果你需要在多台电脑上工作,可以通过USB记忆棒或硬盘来传送代码。你可以在一台电脑上创建一个名为repoName.git的仓库,然后将这个仓库添加到USB设备上:

cd /path/to/memory/stick
mkdir repoName.git
cd repoName.git
git init --bare

然后,在你的本地仓库中,添加USB设备上的仓库为远程仓库,并将你的更改推送到这个远程仓库:

cd /path/to/local/repo/
git remote add origin /path/to/memory/stick/repoName.git
git push origin master

之后,你可以将USB设备挂载到其他电脑上,然后从USB设备上的远程仓库拉取代码。注意,在执行git pull,fetch或push操作时,要确保USB设备已经挂载到电脑上。

除了使用USB设备,你还可以使用CD/DVD来进行代码传送。你只需要将一台电脑上的本地Git仓库复制到另一台电脑上,然后在这两台电脑上进行正常的修改和提交。当你需要合并代码时,选择一台电脑执行合并,并将另一台电脑上的仓库复制过来:

git pull /path/to/other/repo

如果你希望将更改保存在一个新的分支中,你可以这样做:

git fetch /path/to/other/repo
git checkout -b new_branch FETCH_HEAD

至此,你已经创建了一个包含所有合并的新仓库,并将其复制到了其他电脑上。

需要注意的是,这种方法有一些不足。例如,复制整个仓库目录会包括个人设置和.gitignore文件中排除的文件。

因此,你可以使用git bundle来解决这个问题。git bundle可以将仓库的一部分或全部压缩成一个单一的文件,然后你可以从这个文件中克隆和获取。

例如,你可以在一台电脑上创建一个bundle,然后将这个bundle复制到另一台电脑上:

git bundle create repoName.bundle --all

然后,在另一台电脑上从这个bundle中克隆仓库:

git clone repoName.bundle

你可以在任何电脑上进行修改和提交,然后选择一台电脑执行合并。在执行合并的电脑上,你需要从bundle中拉取更改:

git pull /path/to/repoName.bundle

然后,创建一个新的bundle,并将其复制到其他电脑上:

git bundle create repoName.bundle --all

在其他电脑上,你可以从这个新的bundle中拉取最新的更改:

git pull /path/to/repoName.bundle

总的来说,虽然没有网络会让工作变得复杂,但是Git的弹性使得我们仍然可以有效地进行版本控制。虽然这些方法可能没有直接推送到Github那么方便,但至少我们不会看到一堆像main_v1_final version_with_bobs_extra_patch finalfinal_version这样的文件。

原文:https://www.gibbard.me/using_git_offline/


Comments

Leave a Comment