- 1 create a repository with gitosis
- 2 Create a new local branch that you publish publicly.
- 3 Add a new remote repo as a local branch
- 3.1 (1) add additional repo as remote
- 3.2 (2) optional: populate an empty repo.
- 3.3 (3) make everything is in sync.
- 3.4 (4) Create a local branch ‘blue’ based on ‘blue-remote’
- 3.5 (5) Make it so that the push command will do what you expect when in the blue branch
- 3.6 Altogether now
- 4 Creating a Remote Branch
- 4.1 (1) Create the remote branch
- 4.2 (2) Make sure everything is up-to-date
- 4.3 (3) Then you can see that the branch is created.
- 4.4 (4) Start tracking the new branch
- 4.5 (5) Make sure everything is up-to-date
- 4.6 (6) Cleaning up Mistakes
- 5 Pushing a local branch to a remote repo
- 6 Deleting a remote branch, and deleting it from the remote repo
- 7 Separating out subdirectories from repositories
- 8 Colors make the world prettier
create a repository with gitosis¶
git clone gitosis@labs.riseup.net:gitosis-admin.git
edit gitosis.conf
git commit -a -m 'message'
git push
Create a new local branch that you publish publicly.¶
with a shared publishing server
Create new local branch and check it out:
git checkout -b blue
Push this branch to the server:
git push origin blue:blue
origin = repository
blue:blue = refspec in the form of :
With older versions of git you may need to do git push origin blue:refs/heads/blue
Then, other people can check out your branch like so:
git pull
git branch -r
git checkout --track -b blue origin/blue
The git branch -r
is just to check to see if origin/blue was actually added.
To delete your new branch from the server:
git push origin :blue
with a private publishing server
Create a branch called ‘blue’ that other people can pull from using an ssh account on a server with git daemon running.
git remote add published-blue git+ssh://labs.riseup.net/~elijah/public_git/blue.git
git push published-blue master
git remote update
git branch blue published-blue/master
git config remote.published-blue.push blue:master
Then, whenever you want other people to be able to pull your changes:
git checkout blue
git push
Other people can pull this like so:
git clone labs.riseup.net/~elijah/blue.git
Add a new remote repo as a local branch¶
“blue” will be the name of the remote repository. We will add this as “blue-remote” to our repo, and check out a branch called “blue”.
(1) add additional repo as remote¶
git remote add blue-remote gitosis@labs.riseup.net:blue
(2) optional: populate an empty repo.¶
If the remote repository is totally empty, we might want to populate it with our current master.
To do this, you run this command:
git push blue-remote master:refs/heads/master
Only one person would do this once when ‘blue’ was initially created.
(3) make everything is in sync.¶
git remote update
(4) Create a local branch ‘blue’ based on ‘blue-remote’¶
git branch blue blue-remote/master
(5) Make it so that the push command will do what you expect when in the blue branch¶
git config remote.blue-remote.push blue:master
With this, a push in the ‘blue’ branch will push to the remote repository ‘blue’, which is probably what you want.
If you didn’t do this, you would have to do this to get that behavior:
git push blue-remote blue:master
Altogether now¶
git remote add blue-remote gitosis@labs.riseup.net:blue
git remote update
git branch blue blue-remote/master
git config remote.blue-remote.push blue:master
Creating a Remote Branch¶
(1) Create the remote branch¶
git push origin origin:refs/heads/new_feature_name
(2) Make sure everything is up-to-date¶
git fetch origin
(3) Then you can see that the branch is created.¶
git branch -r
This should show origin/new_feature_name
(4) Start tracking the new branch¶
git checkout --track -b new_feature_name origin/new_feature_name
This means that when you do pulls that it will get the latest from that branch as well.
(5) Make sure everything is up-to-date¶
git pull
(6) Cleaning up Mistakes¶
If you make a mistake you can always delete the remote branch
git push origin :heads/new_feature_name
Pushing a local branch to a remote repo¶
Lets say you already have a local branch called “pine”. How do you get this to show up on the remote repository?
> git push origin pine
...
* [new branch] pine -> pine
You may also need to edit .git/config
, depending on how you created the local branch:
[branch "pine"]
remote = origin
merge = refs/heads/pine
Deleting a remote branch, and deleting it from the remote repo¶
Suppose you have a branch set up to track a remote branch, and you want to delete this branch everywhere (the branch, the remote branch it points to, and the branch on the server).
Suppose the branch was named deadbranch:
git branch -d deadbranch
git branch -rd origin/deadbranch
git push origin :deadbranch
The first line deletes your branch, the second line deletes your remote, and the third line pushes this to the server.
In order for other people to get these changes, they must run:
git remote prune origin
Separating out subdirectories from repositories¶
Say you have a repository that contains a project that has several nicely related subprojects in directories. You want to split out these subprojects so that you can share them with other projects and repositories, in otherwords they need to live their own lives as their own repositories.
To do this you just need to use the command ‘git-filter-branch’ as follows:
$ cp -a repo repo.old # just to keep a backup
$ cd repo
$ git filter-branch --subdirectory-filter somedir -- --all
This will rewrite as much refs as possible and leave you sitting in the directory ‘somedir’ with nothing else surrounding it.
Note that ‘refs/original/*’ will still point to the old commits and you will get a message about this, so they won’t be gone totally, you need to now clone this repository somewhere else, once you are sure the filter-branch did what you want:
$ cd ..
$ git clone repo repo2
(check out repo2)
$ rm -rf repo
Now repo2 is a clean repository with only the files and commits related to the directory that you specified with ‘somedir’ above!
Colors make the world prettier¶
Adding the following to your $HOME/.gitconfig makes things really nice to look at:
[color]
ui = auto
[alias]
rlog = log --pretty=format:\"%h %Cblue%cr%Creset %cn %Cgreen%s%Creset\"
Now try doing a ‘git-log -p’ and also a ‘git rlog’. Makes reading diffs much easier, and makes seeing the recent commits easy.