{"id":791,"date":"2020-12-25T20:29:44","date_gmt":"2020-12-26T01:29:44","guid":{"rendered":"https:\/\/richrijnders.com\/?p=791"},"modified":"2021-02-14T10:52:07","modified_gmt":"2021-02-14T15:52:07","slug":"how-to-setup-drobo-5n2-as-git-server-for-xcode","status":"publish","type":"post","link":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/","title":{"rendered":"How To Use Drobo 5N\/5N2 as a Git Server for Xcode"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Header Image and Title&#8221; _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221; background_enable_image=&#8221;off&#8221; background_size=&#8221;contain&#8221;][et_pb_row _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221;][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/git-on-drobo-with-xcode.jpg&#8221; alt=&#8221;Git on Drobo Title Image&#8221; title_text=&#8221;Git on Drobo with Xcode&#8221; align=&#8221;center&#8221; _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Introduction&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||0px|||&#8221;][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text ol_item_indent=&#8221;5px&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h2>Introduction<\/h2>\n<p>In this tutorial we will endeavor to set up our Drobo 5N (or 5N2) as a Git server. That is, the Drobo will host\u00a0<em>Remote Git Repositories<\/em>\u00a0for our local Xcode projects that are under Git source control. With this setup, we can work on our Xcode projects on our desktop or laptop computers, make and commit changes to our\u00a0<em>Local Git Repository<\/em> and then\u00a0<em>push<\/em> those changes to the remote repository which resides on our Drobo. This will allow us to collaborate with other developers on our projects. They will be able to\u00a0<em>clone<\/em> our projects from the Drobo to their own computers so that they can work on the code, check in their changes, and then <em>push<\/em> those changes back up to the Drobo. \u00a0We can then\u00a0<em>branch\u00a0<\/em> and\u00a0<em>fork<\/em> our projects for even more flexibility, safety, and control over our code base.<\/p>\n<p>This setup will actually allow you to use the Drobo as a remote repository for <em>any<\/em> project you have under Git control (Xcode or otherwise) by using the Git command line interface (CLI) from a terminal window. \u00a0But in current releases, Xcode for Mac OS X has included support for Git \/ GitHub built right in to the IDE. Our goal is to get our Drobo hosted Git server working seamlessly from within the Xcode IDE.<\/p>\n<h3>Why Not Just Use GitHub?<\/h3>\n<p>This question was asked of me more than once while I researched issues related to getting this setup working. It is true that Xcode has pretty good support for interfacing with the GitHub web service, however; there are several reasons why you might want to setup up your own Git server on your own Drobo, instead:<\/p>\n<ul>\n<li>GitHub is a product of Microsoft. Sure it has a free tier right now (with limitations) but that might not always be the case. You may not want to build your projects using a platform that could change its terms at any time, leaving you in a lurch.<\/li>\n<li>Maybe you have government or contractual obligations that prohibit you from hosting your source code on external servers.<\/li>\n<li>Perhapse you just don&#8217;t trust your super-secret killer app source code on a server you don&#8217;t own or control.<\/li>\n<li>Heaven forbid you just want to learn how to use Git and manage a remote Git repository to improve your skills and add them to your resume or CV!<\/li>\n<\/ul>\n<p>There may be any number of reasons\u00a0<em>why<\/em> you want to do this. Not the least of which is my own: <em>Because some enterprising hacker created a Git port that runs on Drobo and, by golly, I should be able to get it working with Xcode!<\/em> That is all the justification any hack worth his\/her salt needs! \u00a0So let us begin.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;The Pieces&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;2px|||||&#8221; custom_padding=&#8221;4px||12px|||&#8221;][et_pb_row column_structure=&#8221;3_5,2_5&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; min_height=&#8221;309px&#8221; custom_margin=&#8221;0px|auto||auto||&#8221; custom_padding=&#8221;||0px|||&#8221;][et_pb_column type=&#8221;3_5&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text ol_position=&#8221;outside&#8221; ol_item_indent=&#8221;20px&#8221; admin_label=&#8221;Text&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; width=&#8221;94.4%&#8221; custom_padding=&#8221;||0px|||&#8221;]<\/p>\n<h2>The Pieces<\/h2>\n<p>I will assume that we already have a running and configured Drobo 5N or 5N2. Likewise, I will assume that we have one or more desktop or laptop computers on the same network as our Drobo NAS with Xcode installed for development (otherwise this effort is for naught). Given these, here is what we are going to install and\/or configure in order to reach our goal:<\/p>\n<ol>\n<li>We will install the\u00a0<em>Drobo App<\/em> called\u00a0<em>Git SCM<\/em>  on the Drobo.\u00a0This is our Git Server<\/li>\n<li>The client computers (the desktops or laptops) will connect to the Git Server using SSH &#8211; so we need an SSH server on our Drobo, as well. Luckily there is another\u00a0<em>Drobo App<\/em> called\u00a0<em>Dropbear<\/em> that fits the bill. We will install this on our Drobo, too.<\/li>\n<\/ol>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;2_5&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/puzzle-pieces-shopping-cart.jpg&#8221; title_text=&#8221;puzzle-pieces-shopping-cart&#8221; admin_label=&#8221;Image: Puzzle Pieces in Shopping Cart&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;||-1px|||&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;0px||4px|||&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text ol_position=&#8221;outside&#8221; ol_item_indent=&#8221;20px&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; min_height=&#8221;360px&#8221;]<\/p>\n<ol start=\"3\">\n<li>We will create a new\u00a0<em>Share<\/em>\u00a0called &#8220;GIT&#8221; on our Drobo as the root location where all of our Git Remote Repositories will reside.<\/li>\n<li>We will create a new user account on the Drobo named &#8220;git&#8221;. \u00a0This account will own all of the Git Remote Repositories and perform all Git functions on behalf of our Git client users.<\/li>\n<li>To control who can use our Git Server, we will install the SSH Public Keys of each of our Git Clients into the <em>authorized_keys<\/em> file of the &#8220;git&#8221; user account on the Drobo.<\/li>\n<li>We will create\u00a0<em>symlinks<\/em> to each of the Git executables inside the &#8220;\/user\/bin&#8221; directory on the Drobo.<\/li>\n<li>Logged in and running as the &#8220;git&#8221; user on our Drobo, we will create a new directory on the &#8220;\/\/GIT\/&#8221; share for each Git project and initialize it using the &#8220;git &#8211;bare init&#8221; command.<\/li>\n<li>We will configure the new Git repository on the Drobo as a\u00a0<em>Remote Git<\/em> to each of our Xcode projects.<\/li>\n<li>Finally, we will use the\u00a0<em>Push<\/em> option from within Xcode to push our project from the client computer to the Drobo Git Remote Repository!<\/li>\n<\/ol>\n<p><strong>And if you get all the way through with this setup, there is a bonus code snippet I created to make your Xcode + Drobo + Git administrative tasks a bit easier!<\/strong><\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Drobo Git Share and Drobo Apps&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; min_height=&#8221;2834.3px&#8221; custom_margin=&#8221;||-2px|||&#8221; custom_padding=&#8221;||0px|||&#8221;][et_pb_row admin_label=&#8221;Drobo Apps&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h2>Installing the Drobo Apps<\/h2>\n<p>The first thing we need to do is to install the <em>Git SCM and Dopbear<\/em> apps on our Drobo. \u00a0This is a pretty straight forward process. Just open the Drobo Dashboard on your computer and connect to the Drobo you want to use as your Git server (yes, people often have more than one Drobo). \u00a0Click on the &#8220;Drobo Apps&#8221; item in the left-hand menu. Select the &#8220;Category&#8221; button to sort all the available apps, then scroll all the way down to the &#8220;System Utilities&#8221; section.<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/drobo-apps-install.png&#8221; title_text=&#8221;drobo-apps-install&#8221; show_in_lightbox=&#8221;on&#8221; admin_label=&#8221;drobo-apps-install&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<p>In the System Utilities section you will find the two apps we need: &#8220;Dropbear&#8221; and &#8220;Git SCM&#8221;. \u00a0Installing the apps is straight forward. Just double click each app and then select &#8220;Install&#8221;. \u00a0Do this for each of the two apps. \u00a0Once they are installed, the little &#8220;LED&#8221; underneath the app icons will turn green and you are good-to-go.\u00a0<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row admin_label=&#8221;Create the GIT Share&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h2>Create a Drobo Share to House Your Git Repository<\/h2>\n<p>Now we are going to create a location on the Drobo to house all our Git repositories. In reality, you can just create a directory on any of your existing Drobo\u00a0<em>Shares<\/em>, but I recommend creating a dedicated share just for your Git. This location or share never has to be <em>mounted<\/em> so there is no point in putting it on an existing share where all of the Git nuts and bolts can be viewed by users of the Drobo!<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/drobo-shares.png&#8221; title_text=&#8221;drobo-shares&#8221; show_in_lightbox=&#8221;on&#8221; admin_label=&#8221;image: drobo-shares&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<p>Again, connect to your Drobo with the Drobo Dashboard. In the left-side menu, click &#8220;Shares&#8221; and then click the &#8220;Share Settings&#8221; button.\u00a0<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/drobo-shares-settings.png&#8221; title_text=&#8221;drobo-shares-settings&#8221; show_in_lightbox=&#8221;on&#8221; admin_label=&#8221;image: drobo-shares-settings&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;|auto|35px|auto||&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; custom_margin=&#8221;||-25px|||&#8221;]<\/p>\n<p>In the Settings panel, make sure you have the &#8220;Shares&#8221; view selected. In the left pane you should see a list of all of the existing Shares on the the Drobo. Below the left pane is an &#8220;Add&#8221; button to create a new Share. Click it.\u00a0<\/p>\n<p>In the &#8220;Add Share&#8221; popup window, specify a name for the new share. &#8220;GIT&#8221; seems sort of obvious, but you can name it as you like. \u00a0For the purpose of the rest of this tutorial I will refer to the share as &#8220;GIT&#8221;. \u00a0Don&#8217;t worry about the Time Machine options, just enter the name for the new share and press &#8220;OK&#8221;.<\/p>\n<p>You should now see the new &#8220;GIT&#8221; share listed in the &#8220;Shares&#8221; panel with all the other Drobo Shares. There is no need to\u00a0<em>mount<\/em> the share or authorize any Drobo Users to use it, just move on to the next section where we are going to do some command line work!<\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/drobo-add-new-share.png&#8221; title_text=&#8221;drobo-add-new-share&#8221; show_in_lightbox=&#8221;on&#8221; admin_label=&#8221;Image: drobo-add-new-share&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Create Git User&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;4px|||||&#8221;][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; min_height=&#8221;334px&#8221;]<\/p>\n<h2>Create A &#8220;git&#8221; User On The Drobo<\/h2>\n<p>Now we will create a user named &#8220;git&#8221; on our Drobo. \u00a0This user ID will own all of the Git Remote Repositories created on the Drobo. It will create all of the Git directories and artifacts, so it will own all of the objects and we can be sure that it always has the authority to manipulate the archives on behalf of the Git clients\/users.<\/p>\n<p>Note that you will\u00a0<em>NOT<\/em> be creating &#8220;git&#8221; as a &#8220;Drobo User&#8221; through the Drobo Dashboard! This user will be created in the Drobo OS as a regular OS user. The reason for this is that Drobo Users &#8211; those created through the Drobo Dashboard &#8211; are not true &#8220;user&#8221; ID&#8217;s at the OS level. \u00a0In fact, if you SSH over to your Drobo using your Drobo Admin ID and then check the contents of the <em>\/etc\/passwd<\/em> file, you will see that the only Drobo User ID in the file is the Admin.<\/p>\n<p>So go ahead and open up the <em>terminal<\/em> app (command line) on your computer and\u00a0SSH over to your Drobo using your Drobo Admin ID and the IP address of your Drobo. \u00a0If you don&#8217;t know the IP address of your Drobo, you can find it in the Drobo Dashboard under &#8220;Drobo Settings&#8221; and selecting &#8220;Network&#8221;. \u00a0Write it down or memorize it since you will be using it a lot.<\/p>\n<pre><span style=\"color: #008000;\">  ssh yourdroboadmin@your.drobo.ip.address<\/span><\/pre>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_3,2_3&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; min_height=&#8221;249px&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221;][et_pb_column type=&#8221;1_3&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<p>After your terminal session connects with the Drobo, you will be prompted to enter the admin password for the Drobo. Note that this is the password for the Drobo admin, not for your computer, since you are logging into the Drobo OS. If you successfully log on to the Drobo, you will be presented with a command prompt. You will know that you are now on the Drobo because the command prompt will change from your computer name to the Drobo name, as shown here.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;2_3&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/ssh-successful.png&#8221; title_text=&#8221;ssh-successful&#8221; show_in_lightbox=&#8221;on&#8221; admin_label=&#8221;Image: ssh-successful&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221;]<\/p>\n<p>Further, entering &#8220;whoami&#8221; will show that you are currently running as your Drobo Admin User and entering &#8220;pwd&#8221; shows you are, indeed, on your Drobo file system.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; min_height=&#8221;386px&#8221; custom_padding=&#8221;16px|||||&#8221;]<\/p>\n<p>So now we are going to create our &#8220;git&#8221; user ID. At the Drobo command line enter:<\/p>\n<pre><span style=\"color: #008000;\">  sudo adduser -h \/mnt\/DroboFS\/home\/git git<\/span><\/pre>\n<p>You will be prompted to enter your Drobo admin password and then you will be prompted to enter a new password for the new &#8220;git&#8221; user id. Enter the desired password (twice). If successful, you will see a message telling you <em>&#8220;passwd: password for git changed by root&#8221;<\/em> or something to that effect. To confirm that your new &#8220;git&#8221; user was successfully created, type:<\/p>\n<pre><span style=\"color: #008000;\">  sudo su git<\/span><\/pre>\n<p>You may be prompted to enter your Drobo admin password again if it has been some time since the previous command. If successful, you will be returned to the command prompt. To confirm that you are now running as the new &#8220;git&#8221; user, enter:<\/p>\n<pre><span style=\"color: #008000;\">  whoami<\/span><\/pre>\n<p>If the output is &#8220;git&#8221; then you have successfully created the new &#8220;git&#8221; user ID. Type &#8220;exit&#8221; to revert to the Drobo admin user ID, then type &#8220;exit&#8221; again to log out of the Drobo and return to the command line on your own computer.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Add SSH Certificates&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||3px|||&#8221;][et_pb_row admin_label=&#8221;Row&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||16px||false|false&#8221;]<\/p>\n<h2>Add Your SSH Keys to Use the Git User Account<\/h2>\n<p>In this next step, we are going to take the\u00a0<em>public SSH key<\/em> from our computer and add it to the &#8220;.authorized_keys&#8221; file of the &#8220;git&#8221; user on the Drobo. This will allow us to issue SSH commands from our computer to the Drobo without having to enter the &#8220;git&#8221; user&#8217;s password every time. This means that other users\/computers will also be able to issue SSH\/Git commands from <em>their<\/em> computers without you having to distribute the &#8220;git&#8221; password to everyone (so long as you have also added\u00a0<em>thier<\/em> SSH public key to the &#8220;git&#8221; user&#8217;s <em>.authorized_keys<\/em> file, as well). Now you can control who can access and use the Git repository on the Drobo without having to create new Drobo users or distribute the git password. Only those computers for which you have added the public SSH key to the git user&#8217;s <em>.authorized_keys<\/em> file will be able to use the Git repository.<\/p>\n<p>So you should now be back at the command prompt in\u00a0<em>terminal<\/em> on your computer (after exiting the Drobo at the end of the previous section). First, let&#8217;s see if you already have an SSH\u00a0<em>keypair<\/em> generated for your computer. \u00a0From the command line, navigate to your user&#8217;s\u00a0<em>home<\/em> directory and then check that you are indeed there:<\/p>\n<pre><span style=\"color: #008000;\">  cd ~\/\n  pwd<\/span><\/pre>\n<p>Your terminal screen should look something like this:<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/terminal-cd-home-pwd.png&#8221; title_text=&#8221;terminal-cd-home-pwd&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||23px|||&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; custom_margin=&#8221;||||false|false&#8221; custom_padding=&#8221;||||false|false&#8221;]<\/p>\n<h3>Do You Already Have An SSH KeyPair?<\/h3>\n<p>To check if you already have an SSH KeyPair created on your computer. Enter:<\/p>\n<pre><span style=\"color: #008000;\">  ls -al .ssh<\/span><\/pre>\n<p>If you already have a keypair created, the output will list three files:<\/p>\n<pre><span style=\"color: #008000;\">  id_rsa\n  id_rsa.pub\n  known_hosts<\/span><\/pre>\n<p>If this is the case, you can skip the next part for creating the SSH KeyPair and move on to &#8220;Copying The Public Key&#8221;.<\/p>\n<p>If, instead, the output of the &#8220;ls&#8221; command was<\/p>\n<pre><span style=\"color: #008000;\">  ls: .ssh: No such file or directory<\/pre>\n<p><\/span><\/p>\n<p>then you do not yet have an SSH KeyPair. No worries, we will generate one below.<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; min_height=&#8221;1078px&#8221; custom_padding=&#8221;19px||25px|||&#8221;]<\/p>\n<h3>Create An SSH KeyPair<\/h3>\n<p>If you need to create an SSH KeyPair, first make sure you are in your user&#8217;s\u00a0<em>home<\/em> directory:<\/p>\n<pre><span style=\"color: #008000;\">  cd ~\/\n  pwd<\/span><\/pre>\n<p>You should see the home path for your user id like<\/p>\n<pre><span style=\"color: #008000;\">  \/Users\/yourname<\/span><\/pre>\n<p>If you are in the right place, then start the key generation process by typing<\/p>\n<pre><span style=\"color: #008000;\">  ssh-keygen -t rsa<\/span><\/pre>\n<p>You will be prompted to enter a file name to save the KeyPair. Just hit ENTER to accept the default.<\/p>\n<pre><span style=\"color: #008000;\">  Generating public\/private rsa key pair.\n  Enter file in which to save the key (\/Users\/yourname\/.ssh\/id_rsa):<\/span><\/pre>\n<p>You will then be prompted to enter a passphrase for the new key. You can just hit enter for no password. If you do enter a password, keep in mind that you will occasionally have to re-enter that password when issuing Git commands or performing Git functions in your projects. You will be prompted again to confirm the passphrase (or ENTER again for no passphrase). The result should look something like this<\/p>\n<pre><span style=\"color: #008000;\">  Created directory '\/Users\/yourname\/.ssh'.\n  Enter passphrase (empty for no passphrase): \n  Enter same passphrase again: \n  Your identification has been saved in \/Users\/yourname\/.ssh\/id_rsa.\n  Your public key has been saved in \/Users\/yourname\/.ssh\/id_rsa.pub.\n  The key fingerprint is:\n  SHA256:kf7WoKd6ZUkzS7UDnrOEk3SdaHE\/6IRHZsKWT5Zt25E yourname@YourComputer\n  The key's randomart image is:\n  +---[RSA 3072]----+\n  |         .o==+  .|\n  |        ..OBBooE |\n  |       .oB.B+ooo.|\n  |       .+.X++ ...|\n  |        S=.B..   |\n  |         o*o     |\n  |        .o+ .    |\n  |        .+       |\n  |      .o.        |\n  +----[SHA256]-----+<\/span><\/pre>\n<p>You have successfully generated your SSH KeyPair. So now we will copy the public key to our clipboard and paste it in to the &#8220;git&#8221; user&#8217;s <em>&#8220;authorized_keys&#8221;<\/em> file on the Drobo.<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h3>Copy Your SSH Public Key Into the Drobo &#8220;git&#8221; User Authorized Keys File<\/h3>\n<p>Again, start by opening the <em>terminal\u00a0<\/em>app on your computer and\u00a0making sure you are in your home directory by typing<\/p>\n<pre><span style=\"color: #008000;\">  cd ~\/\n  pwd<\/span><\/pre>\n<p>Now we will output the contents of our public ssh key file to the screen. Type<\/p>\n<pre><span style=\"color: #008000;\">  cat .ssh\/id_rsa.pub<\/span><\/pre>\n<p>The output will be a long string of gibberish that looks something like this:<\/p>\n<pre><span style=\"color:#008000;\">youruser@yourcomputer ~ % cat .ssh\/id_rsa.pub\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNgAcRKBp5ZJVpuvKWtG0Jgv59vwr0G5RSmhxU3VnIPrzf16b+JSyGSnap6ZDKiLTiok+t1v2f+mFzgeeqa9OrH3irhWKh+Vy+\/Rl8Z3uJMxLSOTB0rxMYD0MNTKTo+m32a8ITAE8ES8DvcGmGp5uT5pNhtAriaMM4hZusR6lbrOZUT1ffRPG2MMQOhfqQ9ZvJaqgO\/OpM20sNNJ++67vtDlIwW4I0sNynk743g1+KUQOzO3Bggr9x8Iq25fLU4cOg49kxhBeQGjP6ykA6sYYvpdXn50TcCt1b0PjkOtnM\/DAJKClBzPfF1BhJVyWhuB6wGWTIrjgfgCGcvIXbVI6w9kAiTwZvqsh8H8WNtxCp74DYYY5ONWezaLjATTI0h5Y5SJS6RdRbNSByXhuJnbIJx\/GfbrMLF2wlwFAUPl9c9IfhMUEvZY7uqm12Jvvj2oqltTL5q2g3+PJ5FOhMwXq4YDyUKIlzDMXubiBKxJD0vNEUWDpIAs\/49PKBDw5NeqU= youruser@yourcomputer<\/span><\/pre>\n<p>Select the entire public key string and copy it to your clipboard (CMD+C).\u00a0Now we want to SSH over to our Drobo and log in as our &#8220;git&#8221; user<\/p>\n<pre><span style=\"color: #008000;\">  ssh git@your.drobo.ip.address<\/span><\/pre>\n<p>You will be prompted to enter the password for the &#8220;git&#8221; user on the Drobo. After you enter the password you will be in a command line session on the Drobo. You will know this because the command line prompt will have changed to the name of your Drobo instead of the name of your computer.<\/p>\n<p>First, let&#8217;s make sure that we are running as the &#8220;git&#8221; user and are in the &#8220;git&#8221; user&#8217;s home directory using the &#8220;whoami&#8221; and &#8220;pwd&#8221; commands:<\/p>\n<pre><span style=\"color: #008000;\">  MyDrobo:~ $ whoami\n  git\n  MyDrobo:~ $ pwd\n  \/mnt\/DroboFS\/home\/git<\/span><\/pre>\n<p>If your session looks like the above, we are doing something right. \u00a0So now, let&#8217;s make sure that the proper directories and files exist for our &#8220;git&#8221; user&#8217;s SSH. Enter:<\/p>\n<pre><span style=\"color: #008000;\">  ls -al .ssh<\/span><\/pre>\n<p>Your output should say<\/p>\n<pre><span style=\"color: #008000;\">  ls: .ssh: No such file or directory<\/span><\/pre>\n<p>because we haven&#8217;t created one yet. To create the required directory and set its permissions enter:<\/p>\n<pre><span style=\"color: #008000;\">  mkdir .ssh &amp;&amp; chmod 700 .ssh<\/span><\/pre>\n<p>To create the &#8220;authorized_keys&#8221; file and set its permissions enter<\/p>\n<pre><span style=\"color: #008000;\">  touch .ssh\/authorized_keys &amp;&amp; chmod 600 .ssh\/authorized_keys<\/span><\/pre>\n<p>Now that we have the required file, open the .ssh\/authorized_keys file in your favorite command line editor, paste in the public key you copied from your computer (CMD+V), and save the file. If you haven&#8217;t installed a command line text editor on your Drobo, it does come natively with\u00a0<em>vi<\/em> installed. You can search the internet for a quick tutorial on using <em>vi<\/em>, but in general your steps will be something like this:<\/p>\n<ol>\n<li>Enter &#8220;vi .ssh\/authorized_keys&#8221;<\/li>\n<li>Type &#8220;i&#8221; to switch to\u00a0<em>insert\u00a0<\/em>mode<\/li>\n<li>Type &#8220;CMD+V&#8221; to paste the SSH key from your clipboard into the file<\/li>\n<li>Hit &lt;ESC&gt; to exit\u00a0<em>insert\u00a0<\/em>mode<\/li>\n<li>type &#8220;wq&#8221; to save the file and quit the\u00a0<em>vi<\/em> editor<\/li>\n<\/ol>\n<p>You can enter &#8220;cat .ssh\/authorized_keys&#8221; to verify that your public key is in the file. \u00a0Now that we have done that, let&#8217;s test that it is working as expected. Type &#8220;exit&#8221; to sign out of the Drobo and get back to your computer&#8217;s command line.<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<p>Back at your computer&#8217;s\u00a0<em>terminal<\/em> command line, you should just be able to hit the UP arrow key to bring back the last command you entered and it should be the command to SSH into the Drobo using the &#8220;git&#8221; user. \u00a0If not, just re-enter the command:<\/p>\n<pre><span style=\"color: #339966;\">  ssh git@your.drobo.ip.address<\/span><\/pre>\n<p>This time, when you press enter you should be taken straight-away to the command prompt for your Drobo\u00a0<em>without having to enter the &#8220;git&#8221; user&#8217;s password<\/em>. \u00a0If that is what happened then congratulations, your SSH keys are working as expected! \u00a0Type &#8220;exit&#8221; to log off the Drobo and get back to your computer&#8217;s\u00a0command line again.<\/p>\n<p>Now we are going to test that we can run a command from our computer that will execute as the &#8220;git&#8221; user on the Drobo. At your computer&#8217;s command line, enter:<\/p>\n<pre><span style=\"color: #339966;\">  ssh git@your.drobo.ip.address  \"whoami\"<\/span><\/pre>\n<p>If the response you recieved was &#8220;git&#8221; then we have success! This means that you entered the &#8220;whoami&#8221; command from your computer, it was executed on the Drobo as the &#8220;git&#8221; user and it returned that fact to your computer&#8217;s command line all the way from the Drobo! \u00a0And you doubted me&#8230;<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Creating Symbolic Links to the Git Server Executables&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;4px||0px|||&#8221;][et_pb_row admin_label=&#8221;Row&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||0px|||&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h2>Add Symbolic Links (SYMLINKs) for Git Executables on the Drobo<\/h2>\n<p>Now that we have a &#8220;git&#8221; user ID on the Drobo and a way to execute commands as &#8220;git&#8221; remotely via SSH, we obviously want &#8220;git&#8221; to execute Git commands, right? \u00a0On the Drobo, the Git SCM app installs the Git Executable files in<\/p>\n<pre>  \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/<\/pre>\n<p>But by default, our &#8220;git&#8221; user ID does not have this location in its PATH environment variable and so it cannot execute any of the commands from there because it will not find them. While logged in via SSH as the &#8220;git&#8221; user ID we can see our current PATH variable and using the\u00a0<em>type<\/em> commend we see that our shell has no idea where to find the Git executable files:<\/p>\n<pre><span style=\"color: #008000;\">  Cobra5N:~ $ echo $PATH\n  \/bin:\/sbin:\/usr\/local\/bin\n  Cobra5N:~ $ \n  Cobra5N:~ $ type -p git\n  Cobra5N:~ $<\/span><\/pre>\n<p>As the section title says, we are going to add a <em>symlink<\/em> for each of the Git executables into the &#8220;\/bin&#8221; directory because &#8220;\/bin&#8221; is in the default PATH and that will enable the &#8220;git&#8221; user shell to locate them. But first, I think some additional explanation is required here because some &#8220;obvious&#8221; solutions will not work and some work-arounds offered on the Internet will only partially solve the problem.<\/p>\n<p>&nbsp;<\/p>\n<h3>Modifying PATH Does Not Work!<\/h3>\n<p>OK, so maybe that&#8217;s a bit hyperbolic. Of course you can modify the PATH environment variable and it will work. You can do this temporarily in your current shell with the <em>export<\/em> command or permanently by modifying the\u00a0<em>\/etc\/profile<\/em>\u00a0 file with the additional path to the Git executables. What I should have said is that it is\u00a0<em>insufficient<\/em> for our needs to modify the PATH variable. Allow me to illustrate.<\/p>\n<p>Here I have already modified the PATH variable to include the path to the Git executables. If I now use the\u00a0<em>type\u00a0<\/em>command, I can see that the shell does in fact locate the desired command:<\/p>\n<pre><span style=\"color: #008000;\">  Cobra5N:~ $ echo $PATH\n  \/bin:\/sbin:\/usr\/local\/bin:\/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\n  Cobra5N:~ $ \n  Cobra5N:~ $ type -p git\n  \/mnt\/DroboFS\/Shares\/DroboApps\/bin\/git\n  Cobra5N:~ $<\/span><\/pre>\n<p>So now I can execute any of the desired Git commands from the command line while SSH&#8217;d into my Drobo as the &#8220;git&#8221; user. But there is still a problem. \u00a0Look what happens if I try to execute the command from\u00a0<em>my computer&#8217;s\u00a0<\/em> command line:<\/p>\n<pre><span style=\"color: #008000;\">  rrijnders@Richs-MBP ~ % \n  rrijnders@Richs-MBP ~ % ssh git@192.168.1.65 \"echo \\$PATH\"\n  \/usr\/bin:\/bin\n  rrijnders@Richs-MBP ~ % \n  rrijnders@Richs-MBP ~ % ssh git@192.168.1.65 \"type -p git\"\n  rrijnders@Richs-MBP ~ %<\/span><\/pre>\n<p>What gives? I modified the PATH variable permanently for the &#8220;git&#8221; user. Each time I log in via SSH to a command line shell as &#8220;git&#8221; on my Drobo, I can see the correct path added to the PATH variable and I can execute Git commands willy-nilly. So why does this change not affect the SSH&#8217;d commands from my computer to the Drobo? As it turns out (and by that I mean I discovered after hours of researching on the Internet) that\u00a0<em>Dropbear<\/em> (you remember, that Drobo App we use as an SSH server on the Drobo) <em><strong>does not allow modification of the PATH variable for non-interactive shells<\/strong><\/em>. That is why no matter what you do to the PATH variable of the &#8220;git&#8221; user&#8217;s shell, issuing &#8220;echo \\$PATH&#8221; via SSH still shows only &#8220;\/usr\/bin:\/bin&#8221;.<\/p>\n<p>Modifying the PATH environment variable is insufficient because Git commands issued remotely via SSH will still fail!<\/p>\n<p>&nbsp;<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<\/p>\n<h3>Adding &#8220;uploadpack&#8221; and &#8220;receivepack&#8221; to the Local Git Repository Config Does Not Work!<\/h3>\n<p>Yeah, yeah &#8211; &#8220;Is insufficient for our purposes&#8221;.<\/p>\n<p>You might have seen some suggestions on the Internet directing you navigate to the project root directory on your computer and issue the commands<\/p>\n<pre>git config remote.origin.uploadpack \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-upload-pack\ngit config remote.origin.receivepack \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-receive-pack<\/pre>\n<p>What this essentially does is create a section in the local <em>.git\/config<\/em> file that looks something like this:<\/p>\n<pre>  [remote \"origin\"]\n    uploadpack = \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-upload-pack\n    receivepack = \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-receive-pack<\/pre>\n<p>This tells the local Git configuration (the one for the project on your local computer) where to find those Git commands on the Remote Git server system. Beside the inconvenience of having to enter these for every local project, there are still a few other problems with this solution:<\/p>\n<p>It does not work for all Git commands. It may work for the <em>git push\u00a0<\/em>but not other operations. You would still have to run\u00a0<em>git clone<\/em> with a bunch of &#8220;&#8211;&#8221; switches and pass the path strings directly in the command each time.<\/p>\n<p>Worst of all,\u00a0<strong><em>it does not work within the Xcode IDE!<\/em><\/strong>\u00a0 That is our goal, is it not? This solution may partially work if you want to issue all your Git commands from the command line in\u00a0<em>terminal<\/em>, but if you try to\u00a0<em>push\u00a0<\/em>your project from the Xcode IDE menu (Source Control &#8211;&gt; Push&#8230;) then you will immediately get this error:<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/git-batch-redeive-pack-not-found.png&#8221; title_text=&#8221;git-batch-redeive-pack-not-found&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<\/p>\n<p>The reason for this is because Xcode does not recognize the settings for the remote path in the\u00a0<em>.git\/config<\/em> file and so does not send them with the appropriate switches when issuing the remote commands via SSH.<\/p>\n<p>&nbsp;<\/p>\n<h3>Create the SYMLINKS!<\/h3>\n<p>So the solution I have found that actually works (for our purposes) is to create\u00a0<em>symbolic links<\/em> or &#8220;SYMLINKS&#8221; for each of the Git executables in one of the directories that\u00a0<em>is<\/em> in the default PATH of the &#8220;git&#8221; user when executing a\u00a0<em>non-interactive<\/em> shell. So from your\u00a0<em>terminal<\/em> app on your computer, SSH back to the Drobo using the <strong>Drobo Admin<\/strong> user account:<\/p>\n<pre><span style=\"color: #008000;\">  ssh droboadmin@your.drobo.ip.address<\/span><\/pre>\n<p>Enter the admin password and you should be in the command line shell of the Drobo. \u00a0Now navigate to the \/bin directory:<\/p>\n<pre><span style=\"color: #008000;\">  cd \/bin<\/span><\/pre>\n<p>Now, just enter each of the following commands one at a time:<\/p>\n<pre><span style=\"color: #008000;\">  sudo ln -s \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git git\n  sudo ln -s \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-cvsserver git-cvsserver\n  sudo ln -s \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/gitk gitk\n  sudo ln -s \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-receive-pack git-receive-pack\n  sudo ln -s \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-shell git-shell\n  sudo ln -s \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-upload-archive git-upload-archive\n  sudo ln -s \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-upload-pack git-upload-pack<\/span><\/pre>\n<p>You can check that all of the symlinks have been created by typing<\/p>\n<pre><span style=\"color: #008000;\">  ls -al git*<\/span><\/pre>\n<p>You should see a list of all the symbolic links you just create, like so:<\/p>\n<pre><span style=\"color: #008000;\">  git -&gt; \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git*\n  git-cvsserver -&gt; \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-cvsserver*\n  gitk -&gt; \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/gitk*\n  git-receive-pack -&gt; \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-receive-pack*\n  git-shell -&gt; \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-shell*\n  git-upload-archive -&gt; \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-upload-archive*\n  git-upload-pack -&gt; \/mnt\/DroboFS\/Shares\/DroboApps\/git\/bin\/git-upload-pack*<\/span><\/pre>\n<p>Type &#8220;exit&#8221; to get back to your computer&#8217;s command line. Now if we use the\u00a0<em>type<\/em> command through SSH again, we see that our Git executable files are properly located:<\/p>\n<pre><span style=\"color: #008000;\">  % ssh git@your.drobo.ip.address \"type -p git-receive-pack\"\n  \/usr\/bin\/git-receive-pack\n  %<\/span><\/pre>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Creating and Priming the Project&#8217;s Remote Repository&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||10px|||&#8221;][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;5px||11px|||&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h2>Creating and Initializing a New Git Remote Repository<\/h2>\n<p>Now that we have all of our infrastructure in place, let&#8217;s create and initialize the remote repository for a given project. \u00a0As an example, let&#8217;s say we have an Xcode project on our local computer called &#8220;Udder&#8221; and it is created in a directory called <span style=\"color: #0000ff;\">~\/Projects\/Udder<\/span> and it is already under local Git control. We want to\u00a0<em>push\u00a0<\/em>this project and all the existing\u00a0<em>commits<\/em> to our Drobo hosted Git server.\u00a0The steps in this (and the next) section must be done for each new project that you wish to be hosted on the Drobo Git server.<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/git-local-repo-udder.png&#8221; title_text=&#8221;git-local-repo-udder&#8221; show_in_lightbox=&#8221;on&#8221; admin_label=&#8221;git-local-repo-udder&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;]<\/p>\n<p>The first thing we need to do is to create a location for the project on the Drobo Git Server. This is simply a matter of creating a directory on the Drobo under the &#8220;GIT&#8221; share that we created earlier, and then\u00a0<em>initializing<\/em> that directory using the <em>git init<\/em> command. So, once again, open your\u00a0<em>terminal<\/em> app and SSH on over to the Drobo using the &#8220;git&#8221; user ID.<\/p>\n<pre><span style=\"color: #008000;\">  ssh git@your.drobo.ip.address<\/span><\/pre>\n<p>Once you have a Drobo command line, navigate to the &#8220;GIT&#8221; share we created earlier.<\/p>\n<pre><span style=\"color: #008000;\">  cd \/mnt\/DroboFS\/Shares\/GIT<\/span><\/pre>\n<p>Now create a directory for our project. You could actually name it whatever you want, but common convention is to give it the same name as the project folder on your own computer and add the &#8220;.git&#8221; extension to it. <em>(Caution! If the original project directory name has spaces or special characters, it&#8217;s better to create the remote repository name replacing the spaces or special characters with a hyphen &#8211; or underscore _ otherwise you will encounter problems adding the remote location to the Xcode project in the next section).<\/em><\/p>\n<p>Our project folder was named &#8220;Udder&#8221; so we will create a directory named &#8220;Udder.git&#8221;.<\/p>\n<pre><span style=\"color: #008000;\">  mkdir Udder.git<\/span><\/pre>\n<p>Now we will navigate into the new directory.<\/p>\n<pre><span style=\"color: #008000;\">\u00a0 cd Udder.git<\/span><\/pre>\n<p>Once inside the directory, we want to initialize it for Git use. To do this, we will use the &#8220;git init&#8221; command with the &#8220;&#8211;bare&#8221; option. \u00a0This option creates all the necessary Git artifacts, but does not create a\u00a0<em>working<\/em> copy of the project as nobody will be editing code here directly.<\/p>\n<pre><span style=\"color: #008000;\">  git --bare init<\/span><\/pre>\n<p>Once you see the response:<\/p>\n<pre><span style=\"color: #008000;\">\u00a0 Initialized empty Git repository in \/mnt\/DroboFS\/Shares\/GIT\/Udder\/<\/span><\/pre>\n<p>Then you know you have successfully created and initialized a Git Remote Repository! This location will now be the &#8220;url&#8221; of the Git Remote and referenced like in the following:<\/p>\n<pre><span style=\"color: #008000;\">\u00a0 git@your.drobo.ip.address:\/mnt\/DroboFS\/Shares\/GIT\/yourProject.git<\/span><\/pre>\n<p>Type &#8220;exit&#8221; to log off of the Drobo and return to your computer&#8217;s command line.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Adding the Remote Repository to Your Xcode Project&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;12px||16px|||&#8221;][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h2>Adding the Remote Git Repository to Xcode<\/h2>\n<p>If you open an Xcode project, at the top of the left-side navigator pane is a square icon with an &#8220;X&#8221; inside of it.  This is the &#8220;Source Control Navigator&#8221;.  Click it and you will see the Git artifacts for your project. The last folder in the list contains all of the defined <em>remotes<\/em> for the project. If you expand that folder it will show any currently defined remotes.  In the screen capture below for our &#8220;Udder&#8221; application I have highlighted the <em>Source Control Navigator<\/em> icon and the <em>Remotes<\/em> folder.<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/xcode-udder-no-remotes.png&#8221; title_text=&#8221;xcode-udder-no-remotes&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row column_structure=&#8221;1_2,1_2&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||5px|||&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;]<\/p>\n<p>Adding the new Git Remote Repository as a <em>remote<\/em> location for this project is pretty straight-forward. The only thing to note here is that you will be using the option to <em>add an existing remote<\/em> and NOT the option to add a &#8220;new&#8221; remote.<\/p>\n<p>So right-click or CMD+Click on the &#8220;Remotes&#8221; folder. In the pop-up menu about half-way down is the option to &#8220;Add Existing Remote&#8230;&#8221;  Go ahead and click on that option.<\/p>\n<p>The &#8220;Add an existing remote&#8221; dialog box is displayed. In the first field you will give the remote repository a name. Keep in mind that this name is only a reference for <em>this<\/em> project instance on <em>this<\/em> computer. Each Xcode instance and users on other computers that <em>clone<\/em> this project from the remote might give their remote reference a different name. The default name in Xcode is &#8220;origin&#8221; so we will use that name and type the word &#8220;origin&#8221; in the first input field.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/xcode-add-remote.png&#8221; title_text=&#8221;xcode-add-remote&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;8px|||||&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<p>The second input field is labeled &#8220;Location&#8221; and here is where we will enter the &#8220;url&#8221; for the Git Remote Repository that we created and initialized in the previous section. Enter:<\/p>\n<pre><span style=\"color: #008000;\">git@your.drobo.ip.address:\/mnt\/DroboFS\/Shares\/GIT\/yourproject.git<\/pre>\n<p><\/span><\/p>\n<p>In the screenshot below you can see how I entered the url for the &#8220;Udder&#8221; project on my Drobo.<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/xcode-add-remote-modal.png&#8221; title_text=&#8221;xcode-add-remote-modal&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<p>After adding the remote Git location to your local Xcode project, your <em>Source Code Control Navigator<\/em> will show the new location under the &#8220;Remotes&#8221; folder (you may need to expand that folder to see it).  In the screen shot below you can see that the &#8220;origin&#8221; location has been added my &#8220;Udder&#8221; project.  In the right-side panel is the <em>Source Control Inspector<\/em>. If you select the &#8220;origin&#8221; remote, this panel will show you the details (url) of that remote repository.  You will also note that the remote is still empty &#8211; the center pane of the IDE is still blank.  This is because we have not yet <em>pushed<\/em> our project up to the remote repository.<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/xcode-remote-added-1.png&#8221; title_text=&#8221;xcode-remote-added&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221;]<\/p>\n<h3>Push the Project to the Git Remote Repository<\/h3>\n<p>Make sure that all of your current changes have been <em>committed<\/em> to your local Git repository (Source Control &#8211;&gt; Commit&#8230;).  Now you are ready to <em>push<\/em> your local Git to the new remote Git. Click the &#8220;Source Control&#8221; menu and then select &#8220;Push&#8230;&#8221;.  You should see a pop-up like the following. <\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/xcode-push-dialog.png&#8221; title_text=&#8221;xcode-push-dialog&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<\/p>\n<p>The drop-down lets you select which <em>remote<\/em> you want to push the project to, and also which <em>branch<\/em> to push. We only have the single remote location configured (&#8220;origin&#8221;) and we also have only a single branch (&#8220;main&#8221;) so these are the only options in the drop-down.  When you press the &#8220;Push&#8221; button, all of the Git artifacts will be pushed from your local Git repository to the new Git Remote on the Drobo. Once the <em>push<\/em> completes, you will see the updated information in your Xcode <em>Source Control Navigator<\/em>.<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/xcode-push-successful.png&#8221; title_text=&#8221;xcode-push-successful&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221; text_orientation=&#8221;justified&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<\/p>\n<p>You can see that now under the &#8220;origin&#8221; remote we now can see the &#8220;main&#8221; branch.  If we select that branch, then our center pane shows all of the commits we had previously performed on our local Git are now also on our Remote Git.  Our project is now successfully uploaded to our new Git server!  Congratulations!<\/p>\n<p>Now that the project is available on our Drobo Git Repository, it is available for any of our colleagues to <em>clone<\/em> into their own Xcode.  After you have added their SSH Public Key to the Drobo &#8220;git&#8221; user&#8217;s <em>authorized_keys<\/em> file, all they need to do is open Xcode and select &#8220;Source Control &#8211;&gt; Clone&#8230;&#8221; and enter the <em>url<\/em> to the Drobo Git Remote.<\/p>\n<pre><span style=\"color: #008000;\">  git@your.drobo.ip.address:\/mnt\/DroboFS\/Shares\/GIT\/yourProject.git<\/span><\/pre>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/richrijnders.com\/file\/2020\/12\/xcode-clone.png&#8221; title_text=&#8221;xcode-clone&#8221; show_in_lightbox=&#8221;on&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<\/p>\n<h2>Mission Accomplished!<\/h2>\n<p>Woot! We now have a working Git Remote Repository running on our Drobo working with Xcode on our computers. The only ongoing administration functions we will need to perform are<\/p>\n<ol>\n<li>Add new user&#8217;s SSH Public Keys to the &#8220;git&#8221; user account&#8217;s &#8220;authorized_keys&#8221; file<\/li>\n<li>Create and initialize a directory under <em>\/mnt\/DroboFS\/Shares\/GIT\/<\/em> for each new project<\/li>\n<\/ol>\n<p>The first one is a security function so you will always have to do that as you are the administrator of your Drobo. But I think I can help you automate the steps of the second one&#8230;[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Bonus Code! Create and Prime Remote Repository Without Logging In To the Drobo Shell&#8221; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;18px|||||&#8221;][et_pb_row _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;10px|||||&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<\/p>\n<h2>Bonus Code!<\/h2>\n<p>Each new remote repository you want to create on your Drobo will require you to:<\/p>\n<ol>\n<li>SSH as &#8220;git&#8221; over to your Drobo<\/li>\n<li>Navigate to the GIT share<\/li>\n<li>Create a new directory for the project<\/li>\n<li>Navigate into the new directory<\/li>\n<li>Issue the &#8220;git init&#8221; command to initialize the directory for Git<\/li>\n<li>Log out of the Drobo<\/li>\n<\/ol>\n<p>Six steps just sounds like such a pain! \u00a0OK, stop rolling your eyes. I know it&#8217;s not <em>really<\/em> all that hard and I know that I wouldn&#8217;t be creating new repositories every day. <\/p>\n<p>Still, I am a lazy hacker. I would rather write a <em>tool<\/em> to do those six steps than have to remember them and do them myself. Even better, a tool that <em>other people<\/em> can use to do the task for themselves&#8230;<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.9.0&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<\/p>\n<h3>The Create Git Repository Script<\/h3>\n<p>So from the laziness of my La-Z-Boy desk chair, I present to you this bit of shell scripting:<\/p>\n<p style=\"text-align: center;\"><div class=\"sdm_download_button_box_default\"><div class=\"sdm_download_link\"><a href=\"https:\/\/richrijnders.com\/?sdm_process_download=1&download_id=970\" class=\"sdm_download green\" title=\"Create Git Repository Shell Script\" >createGitRepo.sh<\/a><\/div><\/div><\/p>\n<p>Just download the zip to your computer, unzip the &#8220;createGitRepo.sh&#8221; file, copy it to your Drobo&#8217;s &#8220;\/bin&#8221; directory and make it executable.<\/p>\n<p>Then, from the comfort of the <em>terminal<\/em> on your own computer you can simply type in<\/p>\n<pre><span style=\"color: #008000;\">  ssh git@your.drobo.ip.address \"createGitRepo.sh 'killerApp'\"<\/span><\/pre>\n<p>When executed, the script will produce output similar to the following:<\/p>\n<pre><span style=\"color: #008000;\">  me@MyMBP ~ % ssh git@192.168.1.65 \"createGitRepo.sh 'killerApp'\"\n  Initialized empty Git repository in \/mnt\/DroboFS\/Shares\/GIT\/killerApp.git\/\n  SUCCESS! \/mnt\/DroboFS\/Shares\/GIT\/killerApp.git repository has been initialized!\n  Remote Repository URL is: git@192.168.1.65:\/mnt\/DroboFS\/Shares\/GIT\/killerApp.git\n  me@MyMBP ~ %\n<\/span><\/pre>\n<p>If you created a Drobo share named &#8220;GIT&#8221; as in our instructions then you don&#8217;t have to change a thing in the script. If you put your Git base directory somewhere else, then just edit line 47 with the correct location. Also, if you don&#8217;t know how to copy the script to your Drobo and make it executable, there are some instructions below.<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221;]<\/p>\n<h3>Copying and Installing the Script<\/h3>\n<p>Once you download the zip, you can double-click on it to unzip the file inside. On a Mac, this would normally mean the file is in your &#8220;Downloads&#8221; directory. Wherever yours ends up, open the <em>terminal<\/em> app and navigate to that directory. Once there, you will enter the following sequence of commands:<\/p>\n<pre>  scp createGitRepo.sh git@your.drobo.ip.address:~\/\n  ssh yourDroboAdminID@your.drobo.ip.address\n  sudo chmod 700 \/mnt\/DroboFS\/home\/git\/createGitRepo.sh\n  sudo mv \/mnt\/DroboFS\/home\/git\/createGitRepo.sh \/bin\/createGitRepo.sh\n  exit\n<\/pre>\n<p>That&#8217;s it! Your script is ready to create new Git Remote Repositories on your Drobo<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial we will configure our Drobo 5N or 5N2 and show how to use it as a Git Remote Repository and use it within Xcode to track and share our projects.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[27],"tags":[45,44,46],"class_list":["post-791","post","type-post","status-publish","format-standard","hentry","category-rich-rijnders-tutorials","tag-drobo","tag-git","tag-xcode"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How To Use Drobo 5N\/5N2 as a Git Server for Xcode - Rich Rijnders<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Use Drobo 5N\/5N2 as a Git Server for Xcode - Rich Rijnders\" \/>\n<meta property=\"og:description\" content=\"In this tutorial we will configure our Drobo 5N or 5N2 and show how to use it as a Git Remote Repository and use it within Xcode to track and share our projects.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/\" \/>\n<meta property=\"og:site_name\" content=\"Rich Rijnders\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-26T01:29:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-14T15:52:07+00:00\" \/>\n<meta name=\"author\" content=\"rich\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"rich\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"39 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/\"},\"author\":{\"name\":\"rich\",\"@id\":\"https:\\\/\\\/richrijnders.com\\\/#\\\/schema\\\/person\\\/186c2ab9e139d2ed4065ce4a70046eff\"},\"headline\":\"How To Use Drobo 5N\\\/5N2 as a Git Server for Xcode\",\"datePublished\":\"2020-12-26T01:29:44+00:00\",\"dateModified\":\"2021-02-14T15:52:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/\"},\"wordCount\":7144,\"commentCount\":1,\"keywords\":[\"drobo\",\"git\",\"xcode\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/\",\"url\":\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/\",\"name\":\"How To Use Drobo 5N\\\/5N2 as a Git Server for Xcode - Rich Rijnders\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/richrijnders.com\\\/#website\"},\"datePublished\":\"2020-12-26T01:29:44+00:00\",\"dateModified\":\"2021-02-14T15:52:07+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/richrijnders.com\\\/#\\\/schema\\\/person\\\/186c2ab9e139d2ed4065ce4a70046eff\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/richrijnders.com\\\/how-to-setup-drobo-5n2-as-git-server-for-xcode\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/richrijnders.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How To Use Drobo 5N\\\/5N2 as a Git Server for Xcode\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/richrijnders.com\\\/#website\",\"url\":\"https:\\\/\\\/richrijnders.com\\\/\",\"name\":\"Rich Rijnders\",\"description\":\"Cloud and SOA Integration Architect\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/richrijnders.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/richrijnders.com\\\/#\\\/schema\\\/person\\\/186c2ab9e139d2ed4065ce4a70046eff\",\"name\":\"rich\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6bb4ab7390db5599ceab3677366582dcfc4110c702347142e2a71510ad6f2877?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6bb4ab7390db5599ceab3677366582dcfc4110c702347142e2a71510ad6f2877?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6bb4ab7390db5599ceab3677366582dcfc4110c702347142e2a71510ad6f2877?s=96&d=mm&r=g\",\"caption\":\"rich\"},\"url\":\"https:\\\/\\\/richrijnders.com\\\/profile\\\/rich\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How To Use Drobo 5N\/5N2 as a Git Server for Xcode - Rich Rijnders","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/","og_locale":"en_US","og_type":"article","og_title":"How To Use Drobo 5N\/5N2 as a Git Server for Xcode - Rich Rijnders","og_description":"In this tutorial we will configure our Drobo 5N or 5N2 and show how to use it as a Git Remote Repository and use it within Xcode to track and share our projects.","og_url":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/","og_site_name":"Rich Rijnders","article_published_time":"2020-12-26T01:29:44+00:00","article_modified_time":"2021-02-14T15:52:07+00:00","author":"rich","twitter_card":"summary_large_image","twitter_misc":{"Written by":"rich","Est. reading time":"39 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/#article","isPartOf":{"@id":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/"},"author":{"name":"rich","@id":"https:\/\/richrijnders.com\/#\/schema\/person\/186c2ab9e139d2ed4065ce4a70046eff"},"headline":"How To Use Drobo 5N\/5N2 as a Git Server for Xcode","datePublished":"2020-12-26T01:29:44+00:00","dateModified":"2021-02-14T15:52:07+00:00","mainEntityOfPage":{"@id":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/"},"wordCount":7144,"commentCount":1,"keywords":["drobo","git","xcode"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/","url":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/","name":"How To Use Drobo 5N\/5N2 as a Git Server for Xcode - Rich Rijnders","isPartOf":{"@id":"https:\/\/richrijnders.com\/#website"},"datePublished":"2020-12-26T01:29:44+00:00","dateModified":"2021-02-14T15:52:07+00:00","author":{"@id":"https:\/\/richrijnders.com\/#\/schema\/person\/186c2ab9e139d2ed4065ce4a70046eff"},"breadcrumb":{"@id":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/richrijnders.com\/how-to-setup-drobo-5n2-as-git-server-for-xcode\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/richrijnders.com\/"},{"@type":"ListItem","position":2,"name":"How To Use Drobo 5N\/5N2 as a Git Server for Xcode"}]},{"@type":"WebSite","@id":"https:\/\/richrijnders.com\/#website","url":"https:\/\/richrijnders.com\/","name":"Rich Rijnders","description":"Cloud and SOA Integration Architect","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/richrijnders.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/richrijnders.com\/#\/schema\/person\/186c2ab9e139d2ed4065ce4a70046eff","name":"rich","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/6bb4ab7390db5599ceab3677366582dcfc4110c702347142e2a71510ad6f2877?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6bb4ab7390db5599ceab3677366582dcfc4110c702347142e2a71510ad6f2877?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6bb4ab7390db5599ceab3677366582dcfc4110c702347142e2a71510ad6f2877?s=96&d=mm&r=g","caption":"rich"},"url":"https:\/\/richrijnders.com\/profile\/rich\/"}]}},"_links":{"self":[{"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/posts\/791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/comments?post=791"}],"version-history":[{"count":3,"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/posts\/791\/revisions"}],"predecessor-version":[{"id":1012,"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/posts\/791\/revisions\/1012"}],"wp:attachment":[{"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/media?parent=791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/categories?post=791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/richrijnders.com\/rest\/wp\/v2\/tags?post=791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}