将Linux工作区带到任何地方:书呆子备份

您坐在一台新的Linux计算机上多少次,感觉自己又重新开始了? 所有这些别名,每个小辅助文件和脚本都消失了。 这台新计算机是其前身(双关语意)的外壳。 当您回想起家用Linux工作站所带来的舒适性和生产率时,您的内心感到温暖。 如果只有一种方法可以随时随地带走您所了解和喜爱的一切……

幸运的是,有!

如果您不想自己进行设置,则可以克隆我在Github上制作的预制框架。

我将向您展示如何创建自己的linux-workspace ,您可以在任何地方重新生成它。 设置完成后,您只需连接互联网即可随身携带。

本质上,我们将创建一组通用文件和脚本,使您能够克隆可能在线存储的任何代码存储库。 所有这些都将通过Git进行版本控制,这意味着您可以跟踪所做的任何更改。

这个小小的代码矛盾有两部分。 第一个是sync-home.bash 。 该脚本提供了一种跟踪家中重要文件(例​​如.bashrc , .vimrc等)的更改的方法。 您只需从存储库中的home文件夹中编辑这些文件,然后提交/推送更改。 这可以使您的所有文件保持整齐的跟踪。 同时, sync-home.bash会sync-home.bash将它们复制到位,以便您可以开始使用它们。

第二个脚本带来了clone-repos.py : clone-repos.py是使这一切都有效的原因。 作为输入,它使用以逗号分隔的存储库列表存储在repos.csv 。 从此列表中,它将这些存储库一个一个地克隆到wkdir目录(工作目录的简写)中。

如果您经常发现自己在编写代码或开发任何类型的软件,那么这是一个平滑的解决方案。 对我而言,实现这一目标最耗时的部分是将我所有现有文件整理到Git存储库中,并将它们推送到Bitbucket和Github等网站。

如果您像我,那么当您想编码时,就可以编码。 您不必首先考虑如何组织计算机上的每个最后一个文件,或者如何跟踪所做的每个更改。 您的目标是探索和学习,而不是进行分类和标记。 不过,有时候,您需要找到几个月前所做的事情,而这正是狩猎开始的时候。 就像疯子一样,您将在高低两旁的文件夹中搜索那个偏僻的流氓,那些不道德的脚本。 当您搜寻一次似乎无休止的一次尝试Web应用程序树和随机打喷嚏的想法时,您可能会想知道是否有更好的方法。

这就是为什么养成在Git存储库(或其他某种版本控制)中工作的习惯如此重要的原因。 即使您所做的不是特别结构化的,也可以随时随地建立通用练习库。 主要思想是将您所接触的任何类型的代码获取到存储库中,以便可以将其上传到Github,Bitbucket或您可以在线存储代码的任何其他位置。

将文件推送到一个或多个站点后,这些文件可在多个位置使用,因此您可以放心它们是安全的。 发生火灾时,笔记本电脑被盗,或者您最终愤怒地将可怜的东西扔到了房间里,您会很高兴所有的宝贵代码都以智能方式备份了。

再一次,我想告诉您,您仍然可以摆脱困境-我在这里设置的存储库可以分叉或克隆,以从头开始。 但是,如果您是DIY类型的话,我会尊重的—请继续阅读!

首先,第一件事-如上所述,您将要确保要在工作空间中访问的所有存储库都已上载到某种类型的外部源代码托管服务,无论它是自托管的还是知名的服务之一。

掌握您的主文件并不难。 首先,在linux-workspace存储库中创建一个home目录。 在这里,您会将所有需要的文件保存在家庭区域中,以使生活顺利进行。 接下来,我们需要一个脚本来在需要时安装这些文件。 幸运的是,我已经为您完成了这一部分。 打开一个文本编辑器,准备编写sync-home.bash :

 #!/bin/bash WARNED 
= false
for f in `ls -A home`; do
if
[ -e ~/$f ] && ! $WARNED; then

echo Warning: Files will be overwritten if you continue .

while true; do

echo -n "Continue? (y/n): "
read user_in

if [ "$user_in" = "y" ] ; then

WARNED = true
break

elif [ "$user_in" = "n" ] ; then

exit 0

fi
done
fi

echo Copying home/$f into place...
cp home/$f ~
done
echo Done

这个脚本并没有做很多事情。 基本上,它遍历工作空间home目录中的每个文件。 对于这些文件中的每个文件,它首先检查文件是否在您的实际家庭区域中已经存在。 如果这样做,它会警告您文件可能会被覆盖。 如果您了解这些风险,并且希望脚本在无需获得许可的情况下运行完毕,只需注释掉上面第4-16行即可。

在确认您可以覆盖文件之后,该脚本会将linux-workspace/home文件夹中的所有内容复制到实际的Linux主区域( ~ )。 这样,所有这些小文件,例如.bashrc和.vimrc都将立即可用。 这意味着您现在可以使用您对外壳的所有个人定制,例如快捷方式,别名和其他相关功能。

在不依赖于OneDrive或Google Drive这样繁琐的云服务的情况下,在任何地方重新生成所有使用的文件夹有多大? 有可能,而且并不难。 我们只需要几个文件。

首先,我们将创建一个存储库列表。 您可以根据需要设置此列表的格式,但是任何结构上的更改都必须反映在我们将要编写的实际执行同步的脚本中。 对于我来说,我只是以CSV格式创建了两列。 第一列是代码将在linux-workspace的本地位置。 另一个是存储库的远程源的URL,我们将在该URL进行克隆。 这是我的一个示例:

 github/stephengrice, git@github.com:stephengrice/linux-workspace 

在上面的示例中,将创建本地目录github/stephengrice ,并将linux-workspace从远程地址克隆到该目录中。

现在我们只需要一个脚本来同步它们。

在开始之前,请遍历每个旧存储库,并确保您没有留下任何未提交的内容(输入git status )。 如果有任何问题,我建议创建一个提交以确保跟踪这些更改。 我通常只使用“ Commit old changes”作为提交消息。 我不得不多次将所有存储库都推到远程位置。 这条通用信息是必须做的,因为我没有时间去深入研究每个项目并弄清楚我从哪里结束。

完成此操作后,推送每个存储库-而不仅是master分支。 使用git push --all来确保本地计算机上的所有内容也都在远程站点上。 在这种情况下,我们可以使用同步脚本重新生成所有本地存储库。 之后,由于新克隆的存储库相同,因此我们可以删除原始存储库。

综上所述,这是我们的同步脚本:

 #!/usr/bin/env python3 import csv, os 
WORKING_DIRECTORY_NAME
= 'wkdir'
if __name__ == "__main__":

with open('repos.csv') as file:
csv_data
= csv . reader(file, delimiter = ',')

for row in csv_data:
remote_path
= row[1]
local_path
= row[0]

if os . path . exists('%s/%s' % (WORKING_DIRECTORY_NAME, local_path)):

print ('Already exists: %s' % local_path)

else :

print ('Cloning repository...')
command
= 'git clone %s wkdir/%s' % (remote_path, local_path)

print (command)
os
. system(command)

我的大学程序设计教授会心脏病发作。 没意见! 我变成了什么样的怪物?

教授,请放心-脚本实际上很清晰。 请允许我在接下来的几段中进行记录。

该脚本的顶部是定义要使用的Python解释器,导入库并设置常量。 当我们打开repos.csv时,真正的魔力开始了。 您可能还记得,该文件包含两列-第一,我们要在本地存储存储库,第二,我们要从中克隆的远程存储库的地址。 对于文件中的每个存储库,它都会检查它是否在本地存在,如果不存在,则会克隆远程数据库。

如果您不想每次都输入密码,最好将公共密钥文件(位于~/.ssh/id_rsa.pub ) ~/.ssh/id_rsa.pub到Github和/或Bitbucket配置文件中。 如果您有本地Git服务器,您可能还想推出SSH密钥。

我决定使用Python,因为它比Bash快捷,直接并且功能强大得多(坚不可摧的shell脚本没有冒犯性!)。 随意用任何一种您喜欢的语言制作自己的脚本。

大多数人大部分工作是在家中完成的。 到达那里非常容易-键入cd ,就完成了。 考虑到这一点,我认为每次您想做某事时都一直移到Linux工作区可能很不方便。 为了解决这个问题,我设置了一个简短的别名,使您可以跳转到linux-workspace ,它对我来说一直很好。

虽然您可以为别名使用任何名称,但我将其命名为wkdir 。 要使此别名正常工作,只需在存储库的home目录中编辑.bashrc文件。 添加此行:

 alias wkdir='cd ~/linux-workspace/wkdir' 

输入以下内容完成设置:

 cd ~/linux-workspace 
./sync-home.bash
source ~/.bashrc

现在,尝试一下! 只需随时随地键入wkdir 。

完成所有这些操作后,我们可以采用以下工作流程:

最初设定

  1. 如果尚未将所有代码组织到Git存储库中。 将它们中的每一个推送到某种远程站点(如Github或Bitbucket)。
  2. 设置repos.csv 。 这定义了您希望将每个存储库存储在本地计算机上的位置。 除非添加新的存储库,否则只需要一次。

采用

  1. 对于以后要在其上使用的每台计算机,请使用clone-repos.py将clone-repos.py中定义的所有内容克隆到本地计算机。
  2. 运行sync-home.bash将所有主文件和别名添加到此计算机(如果已定义)。 如果要立即访问别名,可以运行source ~/.bashrc 。 这样,您无需重新启动或重新打开终端会话。
  3. 享受您的新工作环境! 切换到工作区,选择一个存储库,然后进行编码。

牢记所有这些技巧,您可以远离用于代码存储库和Linux文件的云存储。 您现在可以自行建立自己的道路,并根据自己的内心需求自定义工作方式。 祝您运算愉快!

您喜欢学习编程和计算机工程吗? 如果是这样,PageKey Solutions博客就是您的理想选择! 点击这里访问。


最初于 2018年11月24日 发布在 blog.pagekeysolutions.com 上。