
This article will take pieces from other posts I have made at http://www.whiteboardcoder.com/2014/08/using-find-sed-and-xargs-to-replace.html and http://www.whiteboardcoder.com/2014/08/gitignore-and-calculating-tools.html
But, this article will be a little more focused and quick to
the point.
I have a folder which has seven subfolders.  I do not want to track any file with git, but
I do want to have easy access to rsync each folder to other computers.
Each individual folder will have its own rsync script that
can retrieve its contents remotely.   I
will use git to make a repository that only contains scripts and the seven
folders.
Create the repository
| 
> git init | 
Update .git/config 
(not per say necessary)
| 
> vi .git/config | 
Here is my config file
| 
[core] 
       
  repositoryformatversion = 0 
       
  filemode = true 
       
  bare = false 
       
  logallrefupdates = true 
       
  ignorecase = true 
[core] 
       
  packedGitLimit = 128m 
       
  packedGitWindowSize = 128m 
[pack] 
       
  deltaCacheSize = 128m 
       
  packSizeLimit = 128m 
       
  windowMemory = 128m | 
Create .gitignore file
For this git repository I only want to see my scripts, and
the folders they are in.
| 
> vi .gitignore | 
Place the following in it.
| 
#Ignore Everything 
* 
# But not scripts or folders 
!*.sh 
!*/ | 
This first ignores everything.  Then it adds two exceptions. Folders and anything
ending in *.sh (my scripts)
Create Default script
Create a default script that will be copied to each directory.
| 
> vi .rsync-not-git-DEFAULT.sh | 
And place the following in it (replacing the highlighted
area with your own information)
| 
#!/bin/bash 
#Remote location 
url=git.example.com 
#Check for an override name 
name="" 
if [ $2 ] 
then 
 
  name="$2@" 
fi 
#======================================= 
# 
#loc is remote directory path 
loc="/not-git/rsync/my_main_folder/" 
folder=("XXXXX") 
# 
#=============================================== 
flags="-avzr" 
if [ "$1" == 'push' ] 
then 
  echo "Push
  it" 
  #Need to make the
  directories 
  #for folder 
  ssh
  "$name"$url mkdir -p $loc${folder} 
  rsync $flags *
  "$name"$url:$loc$folder 
else 
  echo "Pull it" 
  rsync $flags
  "$name"$url:$loc$folder/* . 
fi | 
Create Copy Script
After this is done create a script that will copy this
script into each folder, rename it and replace the XXXXX with is parent folder
name.
| 
> vi makescripts.sh | 
And place the following in it.
| 
#!/bin/bash 
for folder in `find $PWD -maxdepth 1
  -mindepth 1 -type d -not -path "*/.git"`; do 
 
  cp .rsync-not-git-DEFAULT.sh $folder/.rsync-not-git.sh 
 
  pushd . 
   
  cd $folder 
   
  basename $folder | xargs -I '{}' sed -i 's/XXXXX/{}/g'
  .rsync-not-git.sh 
 
  popd 
done | 
This will find all folders with a maxdepth of 1, ignore the
.git folder, and place the .rsync-not-git.sh script in each folder.  It will then replace the XXXXX with the folder
name.
Create Run All script
Create a run all script that will find all the .rsync-not-git.sh
scripts and run them.  (to make one easy
push)
| 
> vi runallpush.sh | 
And place the following in it. (replace the highlighted with
your username)
| 
#!/bin/bash 
for folder in `find $PWD -iname
  ".rsync-not-git.sh" -exec dirname {} \;`; do 
 
  echo $folder 
 
  pushd . 
 
  cd $folder 
 
  bash ./.rsync-not-git.sh push patman 
 
  popd 
done | 
Rsync all the data
After you have set up the base directory on the server you
will rsync to run the runallpush.sh script/
| 
> ./runallpush.sh | 
Commit git
| 
> git add . 
> git commit -m "initial
  commit" | 
Then on your git server init a bare repo that you can push your
repository to.  In this example I am
sudo'n to the git user (who does not have a normal shell, so you have to
designate it)
| 
> sudo su git -s /bin/bash 
> cd /git/repos 
> mkdir project.git 
> cd project.git 
> git --bare init | 
Finally push it up to a remote master server (adjust the url
to your remote server and the path)
| 
> git remote add origin git@example.com:/git/repos/project.git 
> git push origin master | 
Clone the repo and pull rsync
From another computer clone the repository
| 
> git clone git@example.com:git/repos/project.git | 
After this head into one of the directories from the command
line and pull your data (rsync) edit command for your username.
| 
> ./.rsync-not-git.sh pull patman | 
I could have written on script to run all the scripts and
pull (rsync) all the data down, but that is not my goal here.   My goal is to be able to download a folders
contents, remotely, in a pinch. 
Otherwise I do not want to take up the hard drive space (Or in my
specific case my thumb drive's space)
References
 
No comments:
Post a Comment