Table of Contents |
---|
Edit Permissions
As a first step, contact Ken Brobeck brobeck@slac.stanford.edu and request access to:
Code Block |
---|
/afs/slac/g/cd/swe/git/repos/slac/FACET |
Location of Matlab repositories
Code for Matlab 2020a and beyond will be stored in Git repositories.
...
The repository is also mirrored on github here:
Code Block |
---|
https://github.com/slaclab/facet-matlabTNG |
Location of Python repositories
There are two locations with python/pydm code for FACET-II.
Most pydm GUIs can be found here:
Code Block |
---|
/afs/slac/g/cd/swe/git/repos/slac/pydm_displays/user-facet.git |
And on the controls network it is here:
Code Block |
---|
/usr/local/facet/tools/pydm/display/user-facet/ |
Additional python repos for other experiments, including E320 can be found here:
Code Block |
---|
/afs/slac/g/cd/swe/git/repos/slac/FACET/ |
Cloning the repo on
...
facet-srv01
In your user directory on AFS, create a working directory ('git_work' in this example). Then execute the 'git clone' command:
Code Block |
---|
[sgess@rhel6-64a[fphysics@facet-srv01 ~/sgess ]$ mkdir git_work [fphysics@facet-srv01 ~/sgess ]$ cd git_work [fphysics@facet-srv01 ~/sgess/git_work ]$ git clone ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG.git Initialized empty Git repository in /uhome/atfphysics/sgess/git_work/matlabTNG/.git/ sgess@mcclogin's password: remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. [sgess@rhel6fphysics@facet-64asrv01 ~/sgess/git_work ]$ ls matlabTNG |
Cloning the repo on
...
AFS (rhel6-64, lcls-dev3, et al)
In your user directory on AFS, create a working directory ('git_work' in this example). Then execute the 'git clone' command:
Code Block |
---|
[fphysics@facetsgess@rhel6-srv0164a ~/sgess/git_work ]$ git clone ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG.git Initialized empty Git repository in /homeu/fphysicsat/sgess/git_work/matlabTNG/.git/ sgess@mcclogin's password: remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. [fphysics@facetsgess@rhel6-srv0164a ~/sgess/git_work ]$ ls matlabTNG |
Editing a file and pushing the changes
Before you make edits, use 'git pull' to ensure you are editing the most updated version of the repo.
In this example, we will edit the file 'README.md'. Then we use 'git commit' to commit our changes and 'git push' to add them to the master repo:
Working in home workspace on
...
production
Code Block |
---|
[sgess@rhel6-64a[fphysics@facet-srv01 ~/sgess/git_work/matlabTNG ]$ git pull [fphysics@facet-srv01 ~/sgess/git_work/matlabTNG ]$ vim README.md [sgess@rhel6fphysics@facet-64asrv01 ~/sgess/git_work/matlabTNG ]$ git commit -m "test commit from AFSfacet-srv01" README.md [master c2cb0c2] test commit from AFSfacet-srv01 1 files changed, 2 insertions(+), 0 deletions(-) [sgess@rhel6fphysics@facet-64asrv01 ~/sgess/git_work/matlabTNG ]$ git push origin master sgess@mcclogin's password: Counting objects: 5, done. Delta compression using up to 40 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 333 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG.git ffd224e..c2cb0c2 master -> master |
Updating the production repo
Once you've pushed your changes to the master repo, they are not automatically updated in production. To do that:
Code Block |
---|
[fphysics@facet-srv01 ~/sgess/git_work/matlabTNG ]$ cd /usr/local/facet/tools/matlabTNG/
[fphysics@facet-srv01 /usr/local/facet/tools/matlabTNG ]$ git pull
sgess@mcclogin's password:
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG
c2cb0c2..4cb81f7 master -> origin/master
Updating c2cb0c2..4cb81f7
Fast-forward
README.md | 2 ++
1 files changed, 2 insertions(+), 0 deletions(- |
Working in home workspace on
...
AFS
Code Block |
---|
[fphysics@facetsgess@rhel6-srv0164a ~/sgess/git_work/matlabTNG ]$ vim README.md [fphysics@facetsgess@rhel6-srv0164a ~/sgess/git_work/matlabTNG ]$ git commit -m "test commit from facet-srv01AFS" README.md [master c2cb0c2] test commit from facet-srv01AFS 1 files changed, 2 insertions(+), 0 deletions(-) [fphysics@facetsgess@rhel6-srv0164a ~/sgess/git_work/matlabTNG ]$ git push origin master sgess@mcclogin's password: Counting objects: 5, done. Delta compression using up to 40 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 333 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG.git ffd224e..c2cb0c2 master -> master |
...
Syncing the
...
AFS repo
...
with GitHub
You need to have 'admin' privileges for the repo on GitHub for this to work. Matt Gibbs can grant priviliges.
Working from a directory that has access to SLAC AFS and GitHub
Code Block |
---|
sgess@pc95258:~/git_work/matlabTNG$ git remote add github git@github.com:slaclab/facet-matlabTNG.git
sgess@pc95258:~/git_work/matlabTNG$ git remote -v
github git@github.com:slaclab/facet-matlabTNG.git (fetch)
github git@github.com:slaclab/facet-matlabTNG.git (push)
origin ssh://sgess@centos7:/afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG.git (fetch)
origin ssh://sgess@centos7:/afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG.git (push)
sgess@pc95258:~/git_work/matlabTNG$ git pull
sgess@centos7's password:
Already up to date.
sgess@pc95258:~/git_work/matlabTNG$ git push -u github master
Enumerating objects: 659, done.
Counting objects: 100% (659/659), done.
Delta compression using up to 12 threads
|
Once you've pushed your changes to the master repo, they are not automatically updated in production. To do that:
Code Block |
---|
[fphysics@facet-srv01 ~/sgess/git_work/matlabTNG ]$ cd /usr/local/facet/tools/matlabTNG/ [fphysics@facet-srv01 /usr/local/facet/tools/matlabTNG ]$ git pull sgess@mcclogin's password: remote: Counting objects: 5, done. remote: Compressing objects: 100% (2272/2272), done. remoteWriting objects: 100% (607/607), 2.14 MiB | 4.65 MiB/s, done. Total 3607 (delta 0364), reused 0565 (delta 326), pack-reused 0) Unpacking objectsremote: Resolving deltas: 100% (3364/3364), done completed with 33 local objects. FromTo sshgithub.com:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNGslaclab/facet-matlabTNG.git c2cb0c25ce751c..4cb81f7e251582 master -> origin/master Updating c2cb0c2..4cb81f7 Fast-forward README.md | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-Branch 'master' set up to track remote branch 'master' from 'github'. |
Git Etiquette
General Git workflow to push changes to central repo: pull, add, commit, fetch*, pull, push
*git fetch is optional, but recommended in the event of multiple developers working in the same repo. Via StackOverflow:git fetch
updates your local copy of the repository but does not modify any files in the working directory. It simply makes sure that the cached info it has about the repository you fetched is up-to-date. (If other people created new branches or added some commits since the last time you fetched, git will learn about them.)git pull
is shorthand forgit fetch
followed bygit merge FETCH_HEAD
. That is, it runsgit fetch
and then merges the changes from the remote repository into your current branch and working directory.Code Block [sgess@rhel6-64a ~/sgess/git_work/matlabTNG ]$ vim README.md [sgess@rhel6-64a ~/sgess/git_work/matlabTNG ]$ git add README.md [sgess@rhel6-64a ~/sgess/git_work/matlabTNG ]$ git commit -m "example of typical git workflow" [sgess@rhel6-64a ~/sgess/git_work/matlabTNG ]$ git fetch origin [sgess@rhel6-64a ~/sgess/git_work/matlabTNG ]$ git pull origin master [sgess@rhel6-64a ~/sgess/git_work/matlabTNG ]$ git push origin master
- It is good practice to specify the remote repo and branch (e.g., git push/pull origin master), particularly in case there are multiple branches in a repo.
- Leaving helpful descriptions of changes, bug fixes, etc. is strongly encouraged in your commit messages.
When releasing a new repo to the production release area, the remote repo should be specified with the `ssh://` protocol. This will ensure that other FACET-II shared account users (fsoftegr/fphysics) will be able to access the repo and make changes. E.g.:
Code Block [fphysics@facet-srv01 /usr/local/facet/tools/matlabTNG ]$ git clone ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG/my_new_repo.git [fphysics@facet-srv01 /usr/local/facet/tools/matlabTNG ]$ cd my_new_repo && git remote -v origin ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG/my_new_repo.git (fetch) origin ssh:///afs/slac/g/cd/swe/git/repos/slac/FACET/matlabTNG/my_new_repo.git (push)
- You may work with repos hosted in cloud services such as GitHub/GitLab/etc, but when deploying code to production you must sync them to the master AFS repos as indicated above. This is typically done as follows:
1. Sync to local AFS workspace via internet accessible node (rhel6-64, lcls-dev3).
2. Push to AFS master repo (this can be done by setting different remote repos for fetching and pushing).
3. Proceed with releasing software to production as indicated above.
Gitlist
https://lcls-dev3.slac.stanford.edu/gitlist/slac/FACET/matlabTNG.git
Try to solve Git problems: https://github.com/k88hudson/git-flight-rules