Presentations

Using Git on macOS (2023): Notes

Using Git on macOS (2023): Notes

Script and notes

Setup

  • Prepare RPCEmu:
    • Use 0.9.x, as 0.8.x appears to record as a black screen and you'll be very disappointed after everything going so well that you got an empty screen.
    • The version of RPCEmu I use lives at "~/Library/Applications Support/hostfs".
    • Clear the home directory on HostFS, to make it easier to see what we're doing.
    • Start the emulator, enter the desktop.
    • Set Wimp$Font Homerton.Medium
    • Be aware the menu is Alt-Click
  • Prepare git configuration

    • We need to disable the credential stores and custom configuration so that we can demonstrate the commit and login
    • Rename .gitconfig to .gitconfig-mine
    • Create an empty .gitconfig and add a separate credential store, using a clean file:

      [credential] helper = store --file ~/.git-credentials-demo

    • Edit /usr/local/etc/gitconfig (or maybe /etc/gitconfig) to disable the osxkeychain store

    • This will be equivalent to what the user would see if they had never used git before and had to obtain some credentials.
    • Git requires personal access tokens, so we'll need to demonstrate that without them you get an error, and you should create a token using the URL suggested.
    • Remember to empty the .git-credentials-demo file before each demo.
    • Prepare the screen:
    • Terminal window on the left
    • Prepare a terminal
    • bash
    • clear
    • Scale the window up a bit so that what we're doing is going to be readable.
    • Prepare the remote repository
    • Ensure that the branch add-my-name has been deleted before we start the demo with: git push origin :add-my-name
    • Open an editor window with your GitHub personal token in.

Script

I'm going to demonstrate using git on macOS with RPCEmu. I assume that you're either familiar with git itself, or happy to learn about the system yourself. That you have a copy of RPCEmu installed.

To demonstrate this, I've already got RPCEmu running, and a terminal that we can work in.

I am going to use a fork of the LineEditor module as an example repository. I'm using a fork because I'm going to push changes, but if you're not making changes you can use public repositories.

Set up prerequisites

You will need to have the git tool installed on macOS. The tool is supplied as part of the XCode development environment. If you do not have the full XCode installed, you can use the command xcode-select --install to install the tool.

xcode-select --install

I already have the tools installed. You can check that git has installed properly by running git --version

git --version

When we make changes, we need to enter a commit message. The default editor might have been set to be vim, so you can configure a slightly more friendly editor, like nano:

export EDITOR=nano

The editor you use is your preference, but this is easier for many users.

Having set things up, we need to locate the directory that RPCEmu uses for HostFS. This might be different on your version of RPCEmu, but the default is ~/Library/Application Support/RPCEmu/hostfs here:

cd ~/Library/Application\ Support/RPCEmu/hostfs

alt-tab to the RPCEmu window, then move the mouse into the window (something about focus makes that odd on my old install)

click HostFS to show that there is nothing is present

Using Git

As you can see, this is a bare system just to demonstrate the principles.

alt-tab back to the terminal

I'm going to clone one of my repositories, so that I can demonstrate making changes. The same principle applies to public repositories as well. We do this through a git clone command:

git clone https://github.com/gerph/LineEditor

This has downloaded the repository and checked it out into the LineEditor directory, as we can see here:

ls
cd LineEditor
ls

The recommended way to handle RISC OS filetypes in the host filing system is to append the filetype number to the filenames, separated by a comma. As you can see here there a couple of files with filetypes. In particular the LESrc file has type FD1.

FD1 is the filetype for BASIC text. It is strongly recommended that you keep your BASIC files in text format, as this means that comparing files and editing them on other systems is significantly easier.

If we return to RISC OS, we can see the files are now there. The Filer won't update automatically so you will need to refresh the directory after making changes.

alt-tab to the RPCEmu window, then move the mouse into the window

Menu on the filer, select Refresh and go open the LineEditor window

The files we checked out are here. As you can see there are filetypes set on a few of the files. If we run the !!Release it will create a new LineEditor module.

Double Click on !!Release

This has built the module and placed a copy in the Release directory.

Clear the command window by clicking, and point to the LineEditor module

This is the newly built module.

So, let's make a change to the code and rebuild it. I'm not going to do anything complicated - I'm just going to change the help string to demonstrate the principle. If we use Shift-double-click on the line editor source file, it will load into the editor. I'm using !Edit here because this is a cut down system - but you should use whatever editor you are familiar with.

Shift-double click on LESrc, and make it full screen

I want to change the helpstring, so I'll find it and them make a simple change.

Open menu, Edit->Find, enter 'helpstring' and click go. Click continue to move to the second use and close the search window Click on the end of Olly Betts and add and me

We can then save the file...

Press F3 to save the file and click ok Close the window

And build the new module.

Double click !!release

If we load the module we just built, we should see our change is present.

Double Click on lineeditor to load it F12

Help lineEditor

We can see the help message now has the change in it.

Ok, so we've made our change, so let's see what that looks like in Git. We can return to the terminal and see the change.

alt-tab back to the terminal

Git status will show us what files are changed in the repository.

git status

We can also see that we only changed one line with git diff:

git diff

This shows the old line in red, and the new line in green.

We want to commit this change because it's been tested, and we're happy with it. But it needs to be put on a branch so that it's separate from the main development. This will make it easier for other people to review it. So we create a new branch called 'add-my-name' and move on to it:

git checkout -b add-my-name

Before I can commit anything we need to configure who I are. Git may try to infer this, but it is much better to be explicit about who you are. This is configured in the global settings with git config:

git config --global user.name "Charles Ferguson"
git config --global user.email "gerph@gerph.org"

Then I need to commit the change, so I use git commit. For this we need to use the filename of the file I'm changing. You could use git add and git commit, but this is quicker here:

git commit LESrc,fd1

This opens the nano editor, for me to describe the change. You should always explain the changes you made so that it is clear to people in the future what you were doing and why. The first line is a summary of the change, so should be one line that just says what you were trying to do.

Type...

Add my name

My name is now in the Help string.

Press Ctrl-X to exit the editor and save the file, and that change is now committed.

Ctrl-X, Y, Return (slowly so that people can see the prompts)

We can see the change is present in the history by showing the most recent change.

git show

There's the change we made.

Committing the change here only updates our local repository. To make it available to other people, it is necessary to push the change to the remote repository. The remote repository is called 'origin' by default, and we only want to put the branch we just created.

git push origin add-my-name

Pushing is a write operation, so the remote server needs to know who you are. So we can enter our username and password.

Enter 'gerph' and 'password' at the prompts

But... GitHub doesn't allow you to push with a password any more. Fortunately the documentation that's printed there explains how to create a personal access token which you can use to push code. If you have such a token you can use it in place of your password.

Enter gerph and then copy the token from the window you stashed away

I've pasted my token from another window, there. As you can see, that was successful.

In macOS the default is to store your credentials for a given site in your personal keychain, so this login should only be necessary the first time you use a given site.

And that's it for the basics. I've shown how to git on macOS with RPCEmu, and how to make changes and push them. There are lots of tutorials and help on the Internet on using Git, which you should be able to use with what you've seen here.

Thank you for watching.