Our project uses several third-party open-source libraries, some of which require custom modifications.
For each library we created our own local git repository, added the original source location as a vendor remote, cloned from there, modified it as needed and pushed it to an internal remote repository (let's call it origin).
These repositories are then used as submodules in our core project.
The problem: The "vendor" remote url is not propagated to the "origin" and is therefore lost to anyone who clones the internal library repository.
Every time you want to merge the new upstream changes for a library, you need to find and manually add the vendor remote again (or use the exact same local repository created at the beginning, if it's still available).
Is there a better way to store the vendor repository url so that it can be propagated and used by every developer? Adding an extra file (e.g. clone_from_here
) to the library doesn't seem very elegant, either.
You can do it via .git/config
. After you have successfully pulled or pushed your change, look at the .git/config
file and make a note of the remote url
and fetch
After the repository has been cloned by your developer(s), open up .git/config
on the developers machine and add the line you have copied. Example -
[remote "vendor"]
url = git@xxx.com:xxxxx/xxxxxxx.git
fetch = +refs/heads/*:refs/remotes/origin/*
Your developers can now push or pull to vendor in this example.
If you need more control on writing the fetch url - there is excellent documentation on this at gitguys - http://goo.gl/JGaKD
来源:https://stackoverflow.com/questions/8712816/propagate-a-remote-location-via-clone-push-pull