How to automate workflow in git? - linux

Now I do this:
git commit -a -m "comment"
then (to bitbucket.org)
git push
then (to hosting via ftp)
git ftp push
I want to run these commands automatically:
git fix "comment"
or so:
gitfix "comment"

Create a bash function:
gitfix() {
git commit -a -m "$1" && git push && git ftp push
}
and put it in your ~/.bashrc file so you can just execute it from the terminal as gitfix "some commit comment"
Update: Concatenated the commands with &&, so, in case of failure, the remaining commands will not be executed. Thanks to burper for this update.

Related

Cannot automatically push commits from script

I used the following script (autoupdate.sh) to update my git repository automatically using SSH whenever I make a change to the local repository in raspberry pi 3B.
#!/usr/bin/env bash
DATADIR="/home/pi/data"
cd $DATADIR
if [[ -n $(git status -s) ]]; then
echo "Changed found. Pushing changes..."
git add -A && git commit -m "$1: Update files" && git push origin main
else
echo "No changes found. Skip pushing."
fi
Then I call a script measurement.sh that calls the above script whenever the internet is connected ( I used 4G dongle USB). Something like
...
cd ~/data; bash autoupdate.sh $DATE
...
However, when I run sudo bash measurement.sh it encountered the errors (It has made a commit but not push). Without sudo it works fine.
Permission denied(public key)
...
I checked from GitHub document https://docs.github.com/en/github/authenticating-to-github/troubleshooting-ssh/error-permission-denied-publickey by regenerating the ssh key as well as verified the public key but it did not solve at all. When I pushed commits in a separate terminal it works fines so I do not think the issue relates to the SSH key. I doubt that to run the script successfully it with sudo, the SSH keygen must also be generated with sudo at first.
What could be the reasons for it?
Without sudo it works fine.
So why use sudo in the first place.
As commented, using sudo alone means using commands as root.
At least, a sudo -u <auser> would means the ~ in cd ~/data would be resolved by the appropriate /home/auser, instead of /root.

Is there a way to auto update my github repo?

I have a website running on cloud server. Can I link the related files to my github repository. So whenever I make any changes to my website, it get auto updated in my github repository?
Assuming you have your cloud server running an OS that support bash script, add this file to your repository.
Let's say your files are located in /home/username/server and we name the file below /home/username/server/AUTOUPDATE.
#!/usr/bin/env bash
cd $(dirname ${BASH_SOURCE[0]})
if [[ -n $(git status -s) ]]; then
echo "Changes found. Pushing changes..."
git add -A && git commit -m 'update' && git push
else
echo "No changes found. Skip pushing."
fi
Then, add a scheduled task like crontab to run this script as frequent as you want your github to be updated. It will check if there is any changes first and only commit and push all changes if there is any changes.
This will run every the script every second.
*/60 * * * * /home/username/server/AUTOUPDATE
Don't forget to give this file execute permission with chmod +x /home/username/server/AUTOUPDATE
This will always push the changes with the commit message of "update".

customizing git commands in bash_profile to auto index to next branch

Below is my custom gitp command which works great (with psuedo-code). I would like to add to the script by having it automatically auto-index and checkout to a new branch.
Hoping there is a command-line bash whiz who can figure it out! :)
previous_branch_num = 0;
gitp() {
git add -A &&
git commit -m "${1?'Missing commit message'}" &&
git push
git checkout -b "v{++previous_branch_num}" //<--psuedo code
}
Simply:
#!/bin/bash
previous_branch_num=0
gitp() {
git add -A &&
git commit -m "${1?'Missing commit message'}" &&
git push
git checkout -b "v$((++previous_branch_num))" # <-- real code
}

Use a modified variable in bash script, trying to change git branch programatically

I'm playing around with my custom commands, and I'm currently trying to change a remote Git branch programatically using bash.
issue() {
if [ `git branch --list issue_$1` ]
then
git checkout issue_$1
else
git checkout -b issue_$1
git branch -u origin issue_${1}
fi
}
The idea is this function will try to find the branch issue_X, if it does it switches, otherwise it creates and sets the remote origin.
The problem is git branch -u origin issue_${1} I don't know how to do this, and I'm having trouble googling for it because I don't know what this process is called.
Thanks a lot for the help!
I don't know how to do git branch -u origin issue_${1}
If a remote-tracking branch origin/issue_${1} exists you can do git branch -u origin/issue_${1}.
The problem is that in your situation the remote-tracking branch doesn't exit and you have to create it:
git push -u origin issue_${1}

git alias not receiving parameters

I've been trying to create a new alias that send files to staging area, and at the same time it commit with a message.
I've tried this:
git config --global alias.stagecomm '!git add -A && git commit -m $1'
When I try to run:
git stagecomm "Commit"
It says that it didn't match any files known to git.
Try with a sh: edit your git config --global --edit and type:
!sh -c 'git add -A && git commit -m $1'
Another option: define a script (even on Windows) without extension, called git-stagecomm
In it, put your commands:
git add -A
git commit -m $1
If that script is in your path, you will be able to call it with git stagecomm "mymessage"
Any script called git-xxx will be executed by the git bash, as git xxx.
No alias needed there.
That being said, you could also type (without alias)
git commit -am "My message"
See git commit man page.
-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.
That would not take new files though.

Resources